【发布时间】:2017-12-19 02:34:17
【问题描述】:
我以为我理解了 Python 中的这两个单例值,直到我看到有人在代码中使用return l1 or l2,其中 l1 和 l2 都是链表对象,并且(s)如果不是 None,他想返回 l1,否则,返回 l2。
这段代码很好,因为它很短而且看起来很容易理解。然后,我写了一些代码来弄清楚这里发生了什么。
print ( True or 'arbitrary' ) #True
print ( False or 'arbitrary') #arbitrary
print ( None or 'arbitrary' ) #arbitrary
打印结果符合预期。但是,当我尝试将 None 和 False 放在一起时。发生了一件非常奇怪的事情。
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)值(先 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
【问题讨论】: