Python生成器问题解析

在使用yield的生成器函数中调用自身,某些情况下会发现函数没有按预期往下调用。

例如:

def x(k):
    if k < 0:
        return
    yield k
    x(k - 1)


for i in x(5):
    print(i, end=',')

 

预期:

打印5,4,3,2,1,0,

实际打印:

5,
进程已结束,退出代码为 0

原因是执行到x(k - 1)时,只是生成一个迭代器,并没有执行x(k - 1)这个函数内部代码

正确代码应该在x(k - 1)前面加上yield from使用该迭代器

def x(k):
    if k < 0:
        return
    yield k
    yield from x(k - 1)


for i in x(5):
    print(i)

 

posted @ 2026-03-16 15:45  小鱼圆又圆  阅读(3)  评论(0)    收藏  举报