python - 为什么如果第一个元素为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 ,但是为什么它仍然检查所有元素?它不会导致更糟糕的运行时间吗?
解决方案
你是对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
推荐阅读
- javascript - How can this click() work from inside content script?
- javascript - How to launch an app automatically from a link
- ios - Xcode UItableviewCell with dynamic height, the first THREE cells have a width around the image but after reuse is called its fixed
- python - 如何在 python 中修复一个 Mad Lib?
- asp.net - Switching ASP.NET Secrets Configuration
- swift - How come addChild() results in cannot convert value of type SKAudioNode to expected argument type UIViewController?
- python - regex re.compile multiline or block of text with quotes "
- swift - 安全地读取-比较-写入 UserDefaults 值
- python - 为什么以下目录搜索会导致无限循环?
- python - 反向传播实现