深入浅析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内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
Python基于DES算法加密解密实例
Jun 03 Python
Python进程间通信用法实例
Jun 04 Python
python操作列表的函数使用代码详解
Dec 28 Python
Python操作MySQL模拟银行转账
Mar 12 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
python 5个顶级异步框架推荐
Sep 09 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 Python
Python学习之时间包使用教程详解
Mar 21 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
php魔术变量用法实例详解
2014/11/13 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
六一儿童节活动策划方案
2014/01/27 职场文书
小学毕业感言50字
2014/02/16 职场文书
销售顾问岗位职责
2014/02/25 职场文书
买房协议书
2014/04/11 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
团队拓展活动方案
2014/08/28 职场文书
贫困生证明范文
2015/06/16 职场文书
二十年同学聚会感言
2015/07/30 职场文书
感谢信
2019/04/11 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书