深入浅析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编程中三条常用的技巧
May 11 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
5款非常棒的Python工具
Jan 05 Python
使用python3+xlrd解析Excel的实例
May 04 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
python如何为list实现find方法
May 30 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
实用函数10
2007/11/08 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python数据封装json格式数据
2018/03/04 Python
django框架ModelForm组件用法详解
2019/12/11 Python
Django 路由层URLconf的实现
2019/12/30 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Django nginx配置实现过程详解
2020/09/10 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
幼儿园父亲节活动方案
2014/03/11 职场文书
校园标语大全
2014/06/19 职场文书
研讨会致辞
2015/07/31 职场文书
清洁工工作总结
2015/08/11 职场文书
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android