我遇到了一些类似于以下的代码:
如果 func 的返回值总是评估为 True,则以下内容有效:
或者
[func(val) for val in iterable]
有一个迭代器(在我的情况下是生成器),用户希望对其每个值调用一个函数以获得其副作用(func
可以只是 print
),但返回值无关紧要。
我不喜欢这种方法的原因是会创建一个临时的 list
,如果生成器产生很多值,可能会消耗相当多的内存。
如果 func
的返回值始终评估为 False
,则以下内容有效:
any(func(val) for val in iterable)
如果 func 的返回值总是评估为 True,则以下内容有效:
all(func(val) for val in iterable)
如果func的返回值可以评估为True
或False
,我需要做什么?
有没有比强制其为False更好的方法?
我想到的最好的方法是:
any(func(val) and False for val in iterable)
或者
all(func(val) or True for val in iterable)
(func(val) for val in iterable)
,这是一个构造器,只有在被调用时才会产生结果,因此所有答案在初始化时都不会被保存在内存中。 - Jakob Guldberg Aaesfor val in iterable():
接着func(val)
他想要写一种优雅且高效的方式,用于调用可迭代对象中每个成员的函数,并使用列表表达式。因此,他正在寻找一种单行(最好是表达式)的方法,用于调用可迭代对象中每个成员的函数,但不会无谓地构建一个列表。 - gelonidaany
或all
比使用for
语句略微效率更低,但我对此并不100%确定。我遇到了上面的代码,并且很好奇如何在内存和性能方面进行最佳优化。 - gelonida