深入浅析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实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
Python中__init__.py文件的作用详解
Sep 18 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
scrapy爬虫实例分享
Dec 28 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Django forms组件的使用教程
Oct 08 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
matplotlib绘制正余弦曲线图的实现
Feb 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
用PHP实现小型站点广告管理
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP常用数组函数介绍
2014/07/28 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
Python的Urllib库的基本使用教程
2015/04/30 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
Linux常见面试题
2016/10/04 面试题
如何客观的进行自我评价
2013/12/17 职场文书
小学社会实践活动总结
2014/07/03 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
2016党校培训心得体会
2016/01/07 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
MySQL数据库必备之条件查询语句
2021/10/15 MySQL