Python中的
and
和or
运算符返回值,而不是True
或False
,这对于像以下这样的事情非常有用:x = d.get(1) or d.get(2) or d.get(3)
这将使x
成为d [1]
、d [2]
或d [3]
中存在的值。这有点像在函数式语言中具有加性Maybe monad。
我一直希望Python的any()
函数更像一个重复的or
。我认为它会有意义返回它找到的对象,例如:
any([None, None, 1, 2, None]) == 1
any(notnull_iterator) = try: return next(notnull_iterator); except: return None
对于all()
同样也是如此。在我看来,这个改变完全向后兼容,并且增强了API的一致性。
有人知道之前是否有讨论过这个话题吗?
d[1]
是Falsey值,它将处理到d[2]
等。在这种情况下,为了安全起见,您可以使用x = d.get(1, d.get(2, d.get(3)))
,但不幸的是,这不会短路。 - John La Rooy