深入浅析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生成日历实例解析
Aug 21 Python
在Python中使用SQLite的简单教程
Apr 29 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
python matlibplot绘制多条曲线图
Feb 19 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
python实现QQ邮箱发送邮件
Mar 06 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 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制作简单的内容采集器的代码
2007/11/28 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
python对文件的操作方法汇总
2020/02/28 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
初三家长会邀请函
2014/01/18 职场文书
学校消防安全制度
2014/01/30 职场文书
2014年党小组工作总结
2014/12/20 职场文书
涨价通知
2015/04/23 职场文书
党员承诺书范文2015
2015/04/27 职场文书
python可视化之颜色映射详解
2021/09/15 Python