为什么OR如果第一个元素为True,则返回True,但是ANY仍会检查所有元素,即使第一个元素为True

时间:2019-06-27 00:43:41

标签: python

>>> 1 or 1/0
1
>>> any([1, 1/0])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

我认为any()也可以返回True,只要它在可迭代对象中找到第一个True元素即可,但是为什么它仍然检查所有元素?会不会导致运行时间更糟?

1 个答案:

答案 0 :(得分:2)

您是正确的,any确实会短路(仅根据需要进行评估),但正如@alfasin所说,当您尝试将其插入到{ 1/0。要显示延迟的评估,您必须执行类似我在评论中的内容或

list

def itr():
    yield 1
    yield 1/0

any(itr())  # --> True