深入浅析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 random模块常用方法
Nov 03 Python
Python中的is和id用法分析
Jan 26 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
python爬虫获取百度首页内容教学
Dec 23 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python 图像对比度增强的几种方法(小结)
Sep 25 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 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基础知识:类与对象(5) static
2006/12/13 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
基于zepto.js简单实现上传图片
2016/06/21 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
js css自定义分页效果
2017/02/24 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
python实现操作文件(文件夹)
2019/10/31 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
python爬虫工具例举说明
2020/11/30 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
4S店客服专员岗位职责
2015/04/07 职场文书
《静夜思》教学反思
2016/02/17 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS