Python的reduce()短路吗?

Rei*_*ica 13 python

如果我做:

result = reduce(operator.and_, [False] * 1000)
Run Code Online (Sandbox Code Playgroud)

第一次结果后它会停止吗?(自False & anything == False)

同理:

result = reduce(operator.or_, [True] * 1000)
Run Code Online (Sandbox Code Playgroud)

Muh*_*uri 21

它没有.在这种情况下你的选择是任何所有.

result = reduce(operator.and_, [False] * 1000)
result = reduce(operator.or_, [True] * 1000)
Run Code Online (Sandbox Code Playgroud)

可以替换为

result = all([False] * 1000)
result = any([True] * 1000)
Run Code Online (Sandbox Code Playgroud)

哪个做短路.

时间结果显示了差异:

In [1]: import operator

In [2]: timeit result = reduce(operator.and_, [False] * 1000)
10000 loops, best of 3: 113 us per loop

In [3]: timeit result = all([False] * 1000)
100000 loops, best of 3: 5.59 us per loop

In [4]: timeit result = reduce(operator.or_, [True] * 1000)
10000 loops, best of 3: 113 us per loop

In [5]: timeit result = any([True] * 1000)
100000 loops, best of 3: 5.49 us per loop
Run Code Online (Sandbox Code Playgroud)


kin*_*all 5

reduce()不仅不会短路,它不可能在所有减少的项目上短路,因为它一次只考虑两个项目.另外,它不知道所使用的功能短路的条件.(如果函数可以有一个属性来指示它们开始短路的值,那么reduce()可以识别并使用它,但它们不会.),这将是非常好的.)