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 -- https://mail.python.org/mailman/listinfo/python-list