【发布时间】:2015-11-25 05:50:43
【问题描述】:
在您不关心返回值而是操作完全基于副作用的情况下,执行完整生成器理解的最 Pythonic 方式是什么?
一个例子是根据here 讨论的谓词值拆分列表。很自然地想到写一个生成器理解
split_me = [0, 1, 2, None, 3, '']
a, b = [], []
gen_comp = (a.append(v) if v else b.append(v) for v in split_me)
在这种情况下,我能想出的最佳解决方案是使用any
any(gen_comp)
但是,对于没有看到这种模式的人来说,这并不是很明显。有没有更好的方法来循环通过完整的理解而不将所有返回值保存在内存中?
【问题讨论】:
-
如果您在没有将其分配给变量的情况下执行
any(gen_comp),则会自动将其标记为垃圾收集,但您所做的更像是一种黑客行为,而不是常规操作 - 使用@987654327 @ 循环代替。 -
@RenaeLider 调用函数(因为它的副作用)而不存储返回值是完全可以的(在许多情况下)。
-
@skyking,不过把它塞进理解里是没有意义的;最好只使用循环。
-
@Cyphase 我的意思是关于垃圾收集的重点不是重点(如果您不关心返回值,那么如果它被垃圾收集就可以了)。
标签: python generator list-comprehension