深入浅析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 相关文章推荐
解决python3 网络请求路径包含中文的问题
May 10 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
python后端接收前端回传的文件方法
Jan 02 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
弄清Pytorch显存的分配机制
Dec 10 Python
python 爬取吉首大学网站成绩单
Jun 02 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Django中create和save方法的不同
2019/08/13 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python能做什么
2020/06/02 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
如何用Python绘制3D柱形图
2020/09/16 Python
如何使用Python调整图像大小
2020/09/26 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
企业环保标语
2014/06/10 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python