首页 > 解决方案 > 为什么如果第一个元素为True,OR返回True,但即使第一个元素为True,ANY仍会检查所有元素

问题描述

>>> 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 ,但是为什么它仍然检查所有元素?它不会导致更糟糕的运行时间吗?

标签: python

解决方案


你是对any的,短路(只根据需要评估)但正如@alfasin 所说,1/0当你尝试将它插入到list. 要显示延迟评估,您必须执行我在评论中或

def itr():
    yield 1
    yield 1/0

any(itr())  # --> True

或者

class ErrorOnBool:
    def __bool__(self):
        raise RuntimeError()


any([1, ErrorOnBool()])   # --> True

推荐阅读