例如,包含许多不同项(函数,对象属性,值)的数组:
lst = [
1,
a(),
obj.prop,
...
z()
]
我想检查所有值都为True,所以我使用all()
:
all(lst)
但是在这种情况下,列表的所有值都是在创建列表时计算的。
目的是不计算列表初始化中的所有值,但“即时”计算它,并停止对列表中的第一个False项进行迭代(并计算)。因此,一种解决方案是从生成器产生每个值:
def gen():
yield 1
yield a()
yield obj.prop
...
yield z()
但是它不是干代码,并且重复使用yield关键字看起来很难看。还有其他更漂亮的解决方案吗?
仅在添加列表时使用简单的函数(即不是生成器)来创建列表呢?
def fun():
return [ 1, a(), obj.prop, ... z() ]
...
all(fun())