2024-04-25 17:28:07 发布
网友
我试图用Python创建一个递归生成器,但我做错了什么。这里有一个最小的例子。我希望函数f()返回一个iterable,它将给出所有正数>;=n
>>> def f(n): ... yield n ... if n>0: ... f(n-1) ... >>> [ i for i in f(30) ] [30]
为什么迭代在第一个数字之后停止?在
因为f(n-1)又是一个生成器,它只能与next协议一起使用。如果您使用的是python3.3+,那么可以使用yield from,如下所示
f(n-1)
next
yield from
def f(n): yield n if n > 0: yield from f(n-1) print(list(f(10))) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
如果您想用out yield from进行修复,或者使用没有yield from的Python版本,那么您必须手动迭代并生成这样的结果
你的职能是:
return a generator that generates "n" call function f(n-1) which returns a generator throw that inner generator away, never use it quit
因为
f(n-1)
又是一个生成器,它只能与next
协议一起使用。如果您使用的是python3.3+,那么可以使用yield from
,如下所示如果您想用out
^{pr2}$yield from
进行修复,或者使用没有yield from
的Python版本,那么您必须手动迭代并生成这样的结果你的职能是:
相关问题 更多 >
编程相关推荐