【发布时间】:2018-04-29 23:27:45
【问题描述】:
我的代码在递归调用中使用python3 中的yield from,它工作得非常好。现在的问题是,这是从 PEP-380 在python 3.3 中引入的,我需要它在python 2.7 中工作。我阅读了几篇文章,但没有一篇足够详细或足够简单。
几篇被引用的文章:
还有其他几个。
我重新创建了一个小的示例代码(它接受一个多级列表并返回一个扁平列表),它非常简约与我的要求相比。
#python 3
def foo(obj):
for ele in obj:
if isinstance(ele, list):
yield from foo(ele)
else:
yield ele
#driver 值:
>>> l = [1, [2, 3, [4,5]]]
>>> list(foo(l))
=> [1, 2, 3, 4, 5]
由于yield from 不可用,相同的转换在python 2.7 中不起作用。
【问题讨论】:
-
为什么一定要递归?在内部
yield from也只是一个循环。 -
然而,
yield from的核心是一个带有委托的循环。您不需要委托,但您仍需要循环。 -
好的。愚蠢的我。有用。那里的答案有点混乱,我无法理解。让我换个问题。
-
请注意,
yield from未在 PEP 342 中引入。PEP 380 处理yield from。 -
@MartijnPieters:注意到
标签: python python-2.7 generator yield-from