Today I learned that Python generators can return a value.
Follow me on Twitter, where I write about Python, APL, and maths.
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!
I hope you learned something new! If you did, consider following the footsteps of the readers who bought me a slice of pizza 🍕. Your small contribution helps me produce this content for free and without spamming you with annoying ads.