是否有“从发电机输出所有输出”的简写?

时间:2015-04-04 10:59:49

标签: python python-2.7 generator yield

是否有单行表达式:

for thing in generator:
    yield thing

我试过yield generator无济于事。

3 个答案:

答案 0 :(得分:14)

在Python 3.3+中,您可以使用yield from。例如,

>>> def get_squares():
...     yield from (num ** 2 for num in range(10))
... 
>>> list(get_squares())
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

它实际上可以与任何可迭代使用。例如,

>>> def get_numbers():
...     yield from range(10)
... 
>>> list(get_numbers())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def get_squares():
...     yield from [num ** 2 for num in range(10)]
... 
>>> list(get_squares())
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

不幸的是,Python 2.7没有等效的构造:'(

答案 1 :(得分:2)

您可以使用列表推导从生成器中获取所有元素(假设生成器结束):

[x for x in generator]

答案 2 :(得分:1)

这是一个在Python 2.5+中有效的简单单行内容; - ):

for thing in generator: yield thing