- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章不可思议,Python 的链式操作竟然可以这样由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
学习 Python 的过程中,有没有让你出乎意料的情景,在细品之后,又觉得情理之中呢?(有的话文末留言哈)我就遇到过,初见时不可思议,仔细学习之后,又觉得豁然开朗,Python 的链式操作就是这样的场景.
比如说,你看到 True is False 的结果是 False, False is False 的结果是 True ,不会觉得有什么问题
然后,当你你看到 True is False is False 的结果是 False,可能就觉得不可思议.
因为无论是从前计算,还是从后计算,结果都应该是 True 啊:
当认知和实际情况不一致的时候,恰恰是我们需要学修正自己的时候。这种操作属于链式操作,Python 的官方文档有解释:https://docs.python.org/3/reference/expressions.html#comparisons 。
翻译一下,大致意思就是 Python 中的比较运算与 C 语言不同,这些比较操作具有相同的优先级,该优先级低于任何算术,移位或按位运算.
这些比较操作包括 in, not in, is, is not, <, <=, >, >=, !=, == 操作符,会产生 True 或 False 的结果,这些比较操作符号可以任意的链式比较,比如:x < y <= z,x < y 与 y <= z 具有相同的优先级,不存在先计算 x < y ,得到结果后再与<=z 进行比较的情况,因此x < y <= z 与 x < y and y <= z是等价的.
x < y and y <= z 中,如果 x < y 的结果是 False,那么 y <= z 根本不会被计算.
也就是说a op1 b op2 c ... y opN z 等价于 a op1 b and b op2 c and ... y opN z,每一个表达式最多被执行一次.
注意,a op1 b op2 c 并不代表 a 和 c 有必然的关系,比如这样写x < y > z 也是合法的,虽然并不好看.
那么开始的问题就变得简单了:
相当于 。
结果自然就是 False.
相信,现在你已经明白了下面的现象:
然后,我再分享一下链式操应用的好例子和坏例子.
好例子,一目了然:
坏例子,不知所云。我们应该避免这样写:
用法没问题,但可能让人产生疑问的,类似文章开头的例子,也尽量避免:
原文链接:https://mp.weixin.qq.com/s/P0PcwkWGpw-B-J0yhSe2sw 。
最后此篇关于不可思议,Python 的链式操作竟然可以这样的文章就讲到这里了,如果你想了解更多关于不可思议,Python 的链式操作竟然可以这样的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!