python - 如何获取一个生成器函数的多个实例

标签 python generator

<分区>

Possible Duplicate:
How to clone a Python generator object?

假设我有一个生成器“stuff_to_try”,我可以一个一个地尝试它们,但是如果我有一个方法想要通过生成器并且该方法是递归的,我想让每个递归获得一个全新的生成器从第一个 yield 开始,而不是从最后一个递归停止的地方开始。

def solve(something):
    if exit_condition(something):
        return

    next_to_try = stuff_to_try.next()
    while not if_works(next_to_try):
        next_to_try = stuff_to_try.next()
    solve(do_something(something))

当然我可以在递归函数中定义 stuff_to_try 但有更好的方法吗?是否有等同于 stuff_to_try.clone().reset() 之类的东西?

最佳答案

在函数中定义生成器:

def stuff_to_try():
    return (i for i in [stuff, to, try])

然后每次你想要一个新的生成器时,只需调用该函数即可。

def solve(something):
    if exit_condition(something):
        return

    for next_to_try in stuff_to_try():
        if_works(next_to_try):
            break
    solve(do_something(something))

如果我没看错你的问题,你真正想要的是:

def solve(something):
    if exit_condition(something):
        return

    for each in [stuff, to, try]:
        if_works(each):
            break
    solve(do_something(something))

关于python - 如何获取一个生成器函数的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896951/

相关文章:

python - 如何在 python 2.7 中使用 pymongo 进行多处理池

python - 使用 toctree 的自动摘要还列出了导入的成员

Python - 理解生成器的发送函数

python - 在使用对 iter 和 while 的调用时,如何将字符串的最后 x 个字符作为 python 生成器删除?

python - python中打印时的字符串对齐

python - 我的 python 素数查找器中的无限范围?

Python unicode规范化: is it correct to translate u'\xb 4' to u' \u0301'

mysql - 查询计数并根据字段重置

python - 网络爬虫返回列表 vs 生成器 vs 生产者/消费者

c++ - 在循环中格式化数字