如何在Python中理解“无或错”,“假或无”,“无和假”,“假和无”的结果?

时间:2017-12-19 02:34:18

标签: python logic

我认为我在Python中理解了这两个单例值,直到我看到有人在代码中使用return l1 or l2,其中l1和l2都是链接列表对象,并且如果不是,则他想返回l1没有,否则,返回l2。

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

print ( True or 'arbitrary' ) #True
print ( False or 'arbitrary') #arbitrary
print ( None or 'arbitrary' ) #arbitrary

印刷结果与预期一致。但是,当我尝试将NoneFalse放在一起时。发生了一些非常奇怪的事情。

print ( False or None ) #None
print ( None or False ) #False
print ( None or False or True) #True

所以,我猜return A or B的规则是:

  • 按顺序返回第一个True(非None,Not False)值(First A和B)

  • 如果没有True值,则返回最后一个值。

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

print ( None or False or True or None) # True
print ( None or False or None) # None
print ( False or None or False) # False

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

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

print ( None and False) #None
print ( False and None) #False

3 个答案:

答案 0 :(得分:3)

简短的回答是'和'返回第一个假值或最后一个真值,'或'返回第一个真假或最后一个假答案。

>>> 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

...

{{1}}

答案 1 :(得分:1)

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

对于'或',如果先前未遇到逻辑上的True表达式,则将返回最后一个表达式。该表达式将根据上述规则进行逻辑评估。

答案 2 :(得分:0)

无需猜测。对于or,Python的Reference Manual

“表达式x or y首先评估x;如果x为真,则返回其值;否则,评估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仅在需要时评估。