深入浅析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使用自定义user-agent抓取网页的方法
Apr 15 Python
Python MD5加密实例详解
Aug 02 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
python删除本地夹里重复文件的方法
Nov 19 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
python实现简单坦克大战
Mar 27 Python
python datetime处理时间小结
Apr 16 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
matplotlib教程——强大的python作图工具库
Oct 15 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Django单元测试工具test client使用详解
2019/08/02 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
法律进机关实施方案
2014/03/12 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
高中教师个人工作总结
2015/02/10 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
考研经验交流会策划书
2015/11/02 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs