gpt4 book ai didi

python - 使用 yield 递归

转载 作者:IT老高 更新时间:2023-10-28 20:22:48 25 4
gpt4 key购买 nike

有没有办法混合递归和 yield 语句?例如,无限数生成器(使用递归)将类似于:

def infinity(start):
yield start
# recursion here ...

>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2

我试过了:

def infinity(start):
yield start
infinity(start + 1)

def infinity(start):
yield start
yield infinity(start + 1)

但是他们都没有做我想要的,第一个在产生 start 后停止,第二个产生 start,然后是生成器,然后停止。

注意:请,我知道您可以使用 while 循环来做到这一点:

def infinity(start):
while True:
yield start
start += 1

我只是想知道这是否可以递归完成。

最佳答案

是的,您可以这样做:

def infinity(start):
yield start
for x in infinity(start + 1):
yield x

不过,一旦达到最大递归深度,这将出错。

从 Python 3.3 开始,您将能够使用

def infinity(start):
yield start
yield from infinity(start + 1)

如果你只是递归调用你的生成器函数而不循环它或yield from -ing 它,你所做的只是构建一个新的生成器,而无需实际运行函数体或产生任何东西。

PEP 380了解更多详情。

关于python - 使用 yield 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com