深入浅析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 08 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
python实现SOM算法
Feb 23 Python
python如何生成网页验证码
Jul 28 Python
Selenium定位元素操作示例
Aug 10 Python
python3.x实现base64加密和解密
Mar 28 Python
python创建与遍历List二维列表的方法
Aug 16 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
python中random模块详解
Mar 01 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 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
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
Python字符串详细介绍
2015/05/09 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
深入了解Python数据类型之列表
2016/06/24 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
《石榴》教学反思
2014/03/02 职场文书
生日宴会主持词
2014/03/20 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
经营目标管理责任书
2014/07/25 职场文书
贷款委托书怎么写
2014/08/02 职场文书
顶岗实习协议书
2015/01/29 职场文书
田径运动会通讯稿
2015/07/18 职场文书