前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有趣的 Python 特性 4 | 碰到这种「链式」操作就要小心了。

有趣的 Python 特性 4 | 碰到这种「链式」操作就要小心了。

作者头像
编程文青李狗蛋
发布2019-11-07 16:42:05
2510
发布2019-11-07 16:42:05
举报
文章被收录于专栏:编程文青李狗蛋
本文字数:1026 字

阅读本文大概需要:3 分钟

写在之前

Python 提供了很多让使用者觉得舒服至极的功能特性,但是随着不断的深入学习和使用 Python,我发现其中存在着许多玄学的输出与之前预想的结果大相径庭,这个对于初学者来说难以理解,但是在理解它们以后又会觉得是这么的有意思,所以我准备了这个「有趣的 Python 特性」系列,写一些我碰到或看到的一些你所不知道的「奇葩」,这里面会涉及到在 Python2 和 Python3 中的异同,希望大家能从学习的过程中体会到真正的乐趣。

小心「链式」操作

首先我们先来看两个操作:

代码语言:javascript
复制
>>> (False == False) in [False]
False
>>> True == (False in [True])
False

看到上面 2 个相信对你没什么难度,可以很容易的得出正确结果。那么下面我们再来看一个:

代码语言:javascript
复制
>>> False == False in [False]

对于上面的这个例子,结果是什么呢?自己先想一下,然后请继续往下看:

代码语言:javascript
复制
>>> True == True in [False]
False

看了结果,是不是和你想的有点不一样呢?为什么会是 False 呢?

有兴趣的可以复制看一下下面的链接,看一下官方文档里是怎么具体说明的:

https://docs.python.org/2/reference/expressions.html#not-in

如果 a,b,c... 是表达式,op1,op2,op3...是表达式,那么对于 a op1 b op2 c op3 d... 就相当于是 a op1 b and b op2 c and c op3 d ...

虽然上面的例子看起来不像是 a == b == c 这样舒服,但按照上面的结果拆分一下,得出正确的结果就易如反掌了。

比如 True == True in [False] 就相当于 (True == True)and (True in [False]),and 之前是 True,and 之后是 False,所以最后的结果就是 False。

再比如像下面这样:

代码语言:javascript
复制
>>> False is False is False
True
>>> (1 > 0) < 1
False

这样的结果就很好理解了。

在这里再多说一下上面代码中的第 2 个:(1 > 0) < 1 相当于 True < 1,因为:

代码语言:javascript
复制
>>> int(True)
1

所以 1 < 1 等于 False。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档