【发布时间】:2020-06-12 15:05:41
【问题描述】:
有一个包含许多不同项(函数、对象属性、值)的数组,例如:
lst = [
1,
a(),
obj.prop,
...
z()
]
我想检查所有值是否为真,所以我使用all():
all(lst)
但在这种情况下,列表的所有值都是在创建列表时计算的。
目的是不计算列表初始化时的所有值,而是“即时”计算并停止迭代(并计算)列表中的第一个 False 项。所以一种解决方案是从生成器中产生每个值:
def gen():
yield 1
yield a()
yield obj.prop
...
yield z()
但它不是干代码,重复的 yield 关键字看起来很难看。还有其他更漂亮的解决方案吗?
【问题讨论】:
-
代码很丑,因为“一个包含各种项目的数组”一开始就很丑,你只在每一行添加了
yield关键字。如果定义此列表的最佳方法是按照您所显示的那样逐字写出每个元素,那么不:没有更漂亮的方式将其编写为生成器,可以支持您在第一个元素之后停止评估元素的要求找到 false (all为你做 stackoverflow.com/questions/14730046/…)
标签: python generator dry yield