所有(列表)都使用短路评估吗?

Syl*_*ell 6 python evaluation short-circuiting

我希望使用Python all()函数来帮助我计算某些东西,但是如果all()它没有在它命中时就进行评估,那么这个东西可能会花费更长的时间False.我想它可能是短路评估,但我只是想确定.另外,有没有办法告诉Python如何评估函数?

Ter*_*ryA 14

是的,它短路:

>>> def test():
...     yield True
...     print('one')
...     yield False
...     print('two')
...     yield True
...     print('three')
...
>>> all(test())
one
False
Run Code Online (Sandbox Code Playgroud)

来自文档:

如果iterable的所有元素都为true(或者iterable为空),则返回True.相当于:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

因此当它为return假时,则该函数立即中断.


Ósc*_*pez 7

是的,all确实使用短路评估。例如:

all(1.0/x < 0.5  for x in [4, 8, 1, 0])
=> False
Run Code Online (Sandbox Code Playgroud)

x当到达1列表时,当条件变为假时,上面的操作停止。如果all没有短路,当x达到时我们会除以零0