我正在编写一些Python代码,需要在递归函数中使用生成器。以下是我编写的一些代码,模拟了我尝试做的事情,这是第一次尝试。
def f():
def f2(i):
if i > 0:
yield i
f2(i - 1)
yield f2(10)
for x in f():
for y in x:
print(y)
这个只会打印10,我找到了一个在线的yield from
结构尝试了第二次。
def f():
def f2(i):
if i > 0:
yield i
yield from f2(i - 1)
yield from f2(10)
for x in f():
print(x)
这符合我的要求,但我不理解发生了什么,
yield from
在幕后做了什么,为什么我的第一次尝试不起作用?
f2()
的递归调用是无意义的 - 它返回一个生成器,但你从未迭代它,因此其中的任何代码都不会被执行。 (因此只发生了一级递归,而不是你请求的10级。)yield from
迭代生成器,并将其yield
的值传递给下一个更高的级别。 - jasonharper