深入浅析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 25 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
Jun 16 Python
python中解析json格式文件的方法示例
May 03 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
jupyter note 实现将数据保存为word
Apr 14 Python
python3的pip路径在哪
Jun 23 Python
python3获取控制台输入的数据的具体实例
Aug 16 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
生成缩略图
2006/10/09 PHP
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
js实现弹窗效果
2020/08/09 Javascript
Flask-Mail用法实例分析
2018/07/21 Python
学python安装的软件总结
2019/10/12 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
Python修改DBF文件指定列
2020/12/19 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
python 制作磁力搜索工具
2021/03/04 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
运动会跳远广播稿
2014/02/04 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
聘任书模板
2014/03/29 职场文书
网络营销策划方案
2014/06/04 职场文书
高二英语教学反思
2016/03/03 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python