如果我做:
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)
reduce()不仅不会短路,它不可能在所有减少的项目上短路,因为它一次只考虑两个项目.另外,它不知道所使用的功能短路的条件.(如果函数可以有一个属性来指示它们开始短路的值,那么reduce()可以识别并使用它,但它们不会.),这将是非常好的.)
| 归档时间: |
|
| 查看次数: |
1911 次 |
| 最近记录: |