我有一个递归生成器函数,它创建一个 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
这里的递归是必要的(编辑:至少没有一些繁琐的堆栈管理),所以我认为它需要是一个生成器,不是吗?有解决方法吗?