我正在写一个脚本,在这个脚本中,我必须根据多种条件测试数字。如果满足任何一个条件,我想返回True
,并且我想以最快的方式返回。在
我的第一个想法是使用any()
代替嵌套的if
语句或多个{True
,那么我就可以从{
基于下面的打印是立即发生的,而不是在10(=0+1+2+3+4)秒之后,我认为是这样。是这样还是我搞错了?在
import time
def some(sec):
time.sleep(sec)
return True
print(any(some(x) for x in range(5)))
正确地说,{cdm>使用的是什么呢。例如,以下代码将不会变懒:
列表将被完全构造和计算,然后作为参数传递给
any
。在另一方面,生成器是ITerable,可以根据需要计算每个项目。它们可以是expressions,functions,或者有时手动实现为lazy iterators。在
当^{} 和{a2}函数在iterable的第一个“true”元素上短路时,iterable本身可以以非惰性的方式构造。考虑这个例子:
当
range(10**8)
构造一个10**8元素的列表时,在python2中执行这个操作需要几秒钟的时间。同样的表达式在python3中立即运行,其中range()
是lazy。在是的,
any()
和all()
短路,一旦结果明确就中止:见docs:相关问题 更多 >
编程相关推荐