我知道 reduce 和 all/any 可以解决问题,但是当列表很大时,它的性能很差。
例如:
定义一个函数,包括 print 来检查函数是否已经执行
In [33]: def func(x):
....: print x
....: return bool(x)
....:
operator.or_
作为reduce函数传递
In [34]: import operator
In [35]: reduce(operator.or_, [func(1), func(0)])
1
0
Out[35]: True
然后我们发现即使第一个函数返回True,第二个函数也已执行。
如果我直接使用or操作,一旦发现其中一个返回True,它会立即返回。
In [36]: func(1) or func(0)
1
Out[36]: True
但是,如果我有一个很大的列表,我就不能这样做。
有什么优雅的方法可以做到这一点吗?或者我应该检查什么 for 循环?
更新
我用于任何的起源方式是
In [26]: any([func(1), func(0)])
1
0
Out[26]: True
它确实评估了所有功能。
通过@Martijn Pieters 的回答,我现在知道我可能会以错误的方式使用它。很抱歉不清楚。