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)

浙公网安备 33010602011771号