Generator and return value

Rob Gaddi rgaddi at highlandtechnology.invalid
Wed Jun 7 12:00:36 EDT 2017


On 06/06/2017 11:13 PM, Frank Millman wrote:
> Hi all
> 
> 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?
> 
> Thanks
> 
> Frank Millman
> 
> 

class MyGeneration:
   def __iter__(self):
     yield from ('people', 'try', 'to', 'put', 'us', 'down')
     self.final = 'talking about'

mygen = MyGeneration()
for item in mygen:
   print(item)
print(mygen.final)


-- 
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.



More information about the Python-list mailing list