首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解Python中的“None`或`False”、“`False or None`”、“None` and `False”、“`False and None`”的结果?

如何理解Python中的“None`或`False”、“`False or None`”、“None` and `False”、“`False and None`”的结果?
EN

Stack Overflow用户
提问于 2017-12-19 02:34:17
回答 3查看 158关注 0票数 2

我以为我理解了Python中的这两个单例值,直到我在代码中看到有人使用return l1 or l2,其中l1和l2都是链接的list对象,如果不是None,他希望返回l1,否则,返回l2。

这段代码很好,因为它很短,而且看起来很容易理解。然后,我编写了一些代码来弄清楚这里发生了什么。

代码语言:javascript
复制
print ( True or 'arbitrary' ) #True
print ( False or 'arbitrary') #arbitrary
print ( None or 'arbitrary' ) #arbitrary

打印的结果和预期的一样。但是,当我试图将NoneFalse放在一起时。发生了很奇怪的事。

代码语言:javascript
复制
print ( False or None ) #None
print ( None or False ) #False
print ( None or False or True) #True

因此,我猜return A or B的规则是:

  • 按顺序返回第一个真值(不是无值,不是假值)(首先是A,然后是B)
  • 如果没有True值,则将返回最后一个值。

最后,我运行这个代码来验证我的猜测。

代码语言:javascript
复制
print ( None or False or True or None) # True
print ( None or False or None) # None
print ( False or None or False) # False

结果似乎证明了我的理论。但谁有更多的解释?

而且,当我使用and时,我得到了一些有趣的东西。为什么?

代码语言:javascript
复制
print ( None and False) #None
print ( False and None) #False
EN

回答 3

Stack Overflow用户

发布于 2017-12-19 02:40:48

简短的回答是' and‘返回第一个假值或最后一个真值,或’或‘返回第一个真答案或最后一个错误答案。

代码语言:javascript
复制
>>> None or False
False
>>> False or None
>>> False and None
False
>>> None and False

..。

代码语言:javascript
复制
>>> 0 or 3 or 4
3
>>> 5 and 0 and 6
0
>>> 5 and 0 or 6
6
>>> False or {} or 0
0
>>> 3 and 4 and 5
5
票数 3
EN

Stack Overflow用户

发布于 2017-12-19 02:52:01

在python中,空字符串、set、list、字典、其他容器或0对于逻辑操作都等同于False。非空集合和非零数字在逻辑上是正确的。

对于“或”表达式,如果以前没有遇到逻辑上的真表达式,则将返回最后一个表达式。该表达式将按上述规则进行逻辑计算。

票数 1
EN

Stack Overflow用户

发布于 2017-12-19 02:56:15

不用猜。对于or,Python的参考手册

表达式x or y首先计算x;如果x为true,则返回其值;否则,计算y并返回结果值。

换句话说,x if x else y,其中x只计算一次,只有在需要时才计算y

对于and,将“true”改为“false”。

表达式x and y首先计算x;如果x为false,则返回其值;否则,计算y并返回结果值。

换句话说,x if not x else y,其中x只计算一次,只有在需要时才计算y

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47879272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档