深入浅析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中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python学习小技巧之列表项的排序
May 20 Python
Python实现的简单dns查询功能示例
May 24 Python
使用python实现链表操作
Jan 26 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
python中partial()基础用法说明
Dec 30 Python
Python递归函数实例讲解
Feb 27 Python
简单了解python PEP的一些知识
Jul 13 Python
Python爬虫使用bs4方法实现数据解析
Aug 25 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
python中用ggplot绘制画图实例讲解
Jan 26 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 zend 相对路径问题
2009/01/12 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
Web服务器框架 Tornado简介
2014/07/16 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
Djang中静态文件配置方法
2015/07/30 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python实现扫雷游戏
2020/03/03 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
电子商务毕业生求职信
2013/11/10 职场文书
研修第一天随笔感言
2014/02/15 职场文书
升职自荐信范文
2015/03/27 职场文书
党员承诺书格式范文
2015/04/28 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
导游词之潮音寺
2019/09/26 职场文书
关于Redis的主从复制及哨兵问题
2022/06/16 Redis