深入浅析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进行一些简单的自然语言处理的教程
Mar 31 Python
python getopt详解及简单实例
Dec 30 Python
python 换位密码算法的实例详解
Jul 19 Python
python+opencv实现动态物体追踪
Jan 09 Python
对python中的pop函数和append函数详解
May 04 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
Python解析多帧dicom数据详解
Jan 13 Python
Python实现ATM系统
Feb 17 Python
Python中Yield的基本用法
Oct 18 Python
python爬取抖音视频的实例分析
Jan 19 Python
python实现高效的遗传算法
Apr 07 Python
Python加密技术之RSA加密解密的实现
Apr 08 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
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
基于form-data请求格式详解
2019/10/29 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python 获取网页编码方式实现代码
2017/03/11 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
Python列表对象实现原理详解
2019/07/01 Python
Python操作Jira库常用方法解析
2020/04/10 Python
python中get和post有什么区别
2020/06/19 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
材料加工硕士生求职信
2013/10/10 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
社保委托书怎么写
2014/08/02 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
大专护理专业自荐信
2015/03/25 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers