Today I learned that Python generators can return a value.
Generators are interesting Python objects that produce a series of values, but one by one. In a way, they can be thought of as stateful functions. (That is, functions with state.)
What I learned is that generators can also return something. Here is the tweet that prompted this discovery:
#Python pop quiz: Is this code valid? If so, what does it do?— Raymond Hettinger (@raymondh) October 7, 2021
g = f()
When you use a
return inside a generator,
the generator will have that returned information in its
exception when it's done:
>>> def f(): ... yield 10 ... return 20 ... >>> gen = f() >>> next(gen) 10 >>> next(gen) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration: 20
If you want to get access to that value, you just need to catch the exception:
>>> gen = f(); next(gen); 10 >>> try: ... next(gen) ... except StopIteration as e: ... val = e.value ... >>> val 20
That's it for now! Stay tuned and I'll see you around!
If you enjoyed this blog article, you will love the mathspp insider 🐍🚀 newsletter! Join +16.000 others who are taking their Python 🐍 skills to the next level! 🚀