带有迭代器的Python递归(奇怪的行为)

我编写了这段代码以尝试了解正在发生的事情。

任何人都可以帮助我理解生成器为何不递归调用自身的原因吗? 如何编写递归生成器?

def f_yield(n):
    print(n)
    if n < 5:
        yield n
    else:
        yield f_yield(n-3)

def f_return(n):
    print(n)
    if n < 5:
        return n
    else:
        return f_return(n-3)

[i for i in f_yield(12)]
# prints 12 

f_return(12)
# prints 12 9 6 3
hbsogua 回答:带有迭代器的Python递归(奇怪的行为)

正如凯尔伍德指出,ref: refs/heads/master也是一个迭代器,因此除非您对其进行迭代,否则它不会返回。如果添加f_yield(n-3),则递归开始起作用:

yield from
,

您需要遍历f_yield(n-3) 您可以使用yield from执行此操作:

yield from f_yield(n-3)
本文链接:https://www.f2er.com/3167378.html

大家都在问