Generator and return value

Jussi Piitulainen jussi.piitulainen at helsinki.fi
Wed Jun 7 03:09:54 EDT 2017


Frank Millman writes:

> It would be nice to write a generator in such a way that, in addition
> to 'yielding' each value, it performs some additional work and then
> 'returns' a final result at the end.
>
>> From Python 3.3, anything 'returned' becomes the value of the
>> StopIteration 
> exception, so it is possible, but not pretty.
>
> Instead of -
>    my_gen = generator()
>    for item in my_gen():
>        do_something(item)
>    [how to get the final result?]
>
> you can write -
>    my_gen = generator()
>    while True:
>        try:
>            item = next(my_gen())
>            do_something(item)
>        except StopIteration as e:
>            final_result = e.value
>
> Is this the best way to achieve it, or is there a nicer alternative?

Like this, and imagination is the limit:

def generator(box):
    yield 1
    box.append('won')
    yield 2
    box.append('too')
    yield 3
    box.append('tree')

mabox = []
for item in generator(mabox): pass
print(*mabox)
# prints: won too tree



More information about the Python-list mailing list