深入浅析Python 中 is 语法带来的误解


Posted in Python onMay 07, 2019

起步

Python 的成功一个原因是它的可读性,代码清晰易懂,更容易被人类所理解,但有时可读性会产生误解。

假如要判断一个变量是不是 17,那可以:

if x is 17:

x 是 17 肯定是比 x == 17 更加口语化的。

is的误解

但是如果你尝试:

if name is "weapon":

这个判断不见得管用。is 用来检查左侧和右侧是否是完全相同的对象。如果有两个不同的字符串对象,每个对象的值是相同的,应该使用 == 来判断,因为 is 的用法与口语上的区别挺大的:

if 999 + 1 is 1000: # False

正因为这样的误解,在 if 判断条件上容易让初学者掉坑:

answer = 'yes'
if answer is 'y' or 'yes':

你会发现不管变量是什么值,判断都是为真。因为 is 的优先级高,相当于 if (answer is 'y') or ('yes') 。

正确的方法应该是 if answer == 'y' or answer == 'yes' 或者 if answer in ('y', 'yes') 。

is not 上的混淆

>>> 'something' is not None
True
>>> 'something' is (not None)
False

is not 是一个二元运算符,应该视为一个整体,不要因为中间空格而当成两个词。底层上,它们也是一个操作符,CPython 将 s is not None 翻译成的字节码为:

6 LOAD_NAME        0 (s)
 8 LOAD_CONST        1 (None)
10 COMPARE_OP        9 (is not)

is not 是对 is 相对应的操作符。也可以视为是将 is 判断的结果再进行取反。

总结

我同意 Python 非常易读。每种语言的结构都存在一些“出乎意料”的使用。这并不影响我对 Python 这门语言的喜爱,每个人都应该好好学习,并小心使用选择的语言。

以上所述是小编给大家介绍的Python 中 is 语法带来的误解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现比较两段文本不同之处的方法
May 30 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
Python生成器以及应用实例解析
Feb 08 Python
django如何连接已存在数据的数据库
Aug 14 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
python将图片转base64,实现前端显示
Jan 09 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
Python tkinter和exe打包的方法
Feb 05 Python
django orm模块中的 is_delete用法
May 20 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
python爬虫如何解决图片验证码
Feb 14 Python
python中的None与NULL用法说明
May 25 Python
利用python如何在前程无忧高效投递简历
May 07 #Python
Python可迭代对象操作示例
May 07 #Python
python实现支付宝转账接口
May 07 #Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 #Python
python验证身份证信息实例代码
May 06 #Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 #Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 #Python
You might like
简单易用的计数器(数据库)
2006/10/09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
php实现session共享的实例方法
2019/09/19 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python自定义线程池实现方法分析
2018/02/07 Python
python3 下载网络图片代码实例
2019/08/27 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
css3的transition属性详解
2014/12/15 HTML / CSS
商务英语专业自荐信
2013/10/14 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
行政管理专业求职信
2014/07/06 职场文书
干部培训工作总结2015
2015/05/25 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
python文件目录操作之os模块
2021/05/08 Python
基于Python实现股票收益率分析
2022/04/02 Python