Python中消耗生成器输出但不保留结果的惯用方法是什么?
解决方案
1. 用collections.deque高效耗尽生成器
这是Python社区里消耗迭代器且不保存结果的惯用手法,deque在设置maxlen=0时,会逐个迭代生成器元素但不存储任何内容,内存效率远高于list(),代码也比空循环更简洁:
from collections import deque def do_work_and_yield(): for x in ...: y = do_work_on(x) yield y def only_cares_about_side_effects(): deque(do_work_and_yield(), maxlen=0)
2. 封装通用consume函数强化意图
如果想让代码意图更直白,可以封装一个通用工具函数,复用性更强:
from collections import deque def consume(iterator): """耗尽迭代器,不保留任何结果""" deque(iterator, maxlen=0) def do_work_and_yield(): for x in ...: y = do_work_on(x) yield y def only_cares_about_side_effects(): consume(do_work_and_yield())
consume函数的命名直接传达了“运行迭代器至完成”的意图,比空循环或直接调用deque更具可读性。
补充:空循环的改进
如果不想引入额外依赖,也可以给空循环加注释明确意图,但可读性不如前两种方法:
def only_cares_about_side_effects(): # 耗尽生成器,执行副作用 for _ in do_work_and_yield(): pass
内容的提问来源于stack exchange,提问作者zmccord
相关产品推荐
相关产品推荐

