Is there any shorthand for 'yield all the output from a generator'?

后端 未结 3 508
死守一世寂寞
死守一世寂寞 2021-01-17 07:34

Is there a one-line expression for:

for thing in generator:
    yield thing

I tried yield generator to no avail.

相关标签:
3条回答
  • 2021-01-17 08:18

    You can use a list comprehension to get all of the elements out of a generator (assuming the generator ends):

    [x for x in generator]
    
    0 讨论(0)
  • 2021-01-17 08:27

    Here is a simple one-liner valid in Python 2.5+ as requested ;-):

    for thing in generator: yield thing
    
    0 讨论(0)
  • 2021-01-17 08:30

    In Python 3.3+, you can use yield from. For example,

    >>> 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]
    

    It can actually be used with any iterable. For example,

    >>> 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]
    

    Unfortunately, Python 2.7 has no equivalent construct :'(

    0 讨论(0)
提交回复
热议问题