【发布时间】:2013-11-02 18:42:13
【问题描述】:
我有一个递归生成器函数,它创建一个 ChainMap 上下文树,最后对树末尾的上下文做一些事情。看起来是这样的(parent_context 是一个 ChainMap,hierarchy 是一个列表):
def recursive_generator(parent_context, hierarchy):
next_level = hierarchy[0]
next_level_contexts = get_contexts(next_level) # returns a list of dicts
for context in next_level_contexts:
child_context = parent_context.new_child().update(context)
if next_level == hierarchy[-1]:
yield do_something(**child_context)
else:
yield from recursive_generator(child_context, hierarchy[1:])
现在我想标记层次结构的一个级别,以便操作在完成该级别后暂停,将状态序列化到磁盘以便稍后在它停止的地方拾取。有没有办法在不失去递归优雅的情况下做到这一点?
我知道你不能腌制生成器,所以我考虑重构为一个迭代器对象。但我认为yield from 是这里递归所必需的(编辑:至少不需要对堆栈进行一些繁琐的管理),所以我认为它需要是一个生成器,不是吗?有解决办法吗?
【问题讨论】:
标签: python recursion tree generator python-3.3