On Fri, Nov 21, 2014 at 9:18 AM, Andrew Barnert < firstname.lastname@example.org> wrote:
Generators are a subtype of iterators. They support the iterator protocol completely, and in the same way as any other iterator. They also support extensions to that protocol--e.g., send(). But they also have a relationship to a generator function or generator expression,
interesting -- I've always called those "generator comprehensions" -- but anyway, -- do they have a special relationship?
I can put any iterable in a generator expression:
gen_exp = (i for i in [3,4,5,6])
the result is a generator:
In : type(gen_exp) Out: generator
so I guess you could call that a "special relationship" -- but it looks to me kind of like an alternate constructor.
But in any case, you can use a generator created by a generator expression or a generator function the same way you can use a iterable or an iterator class.
Then again, the word "generator" itself leads to confusion when speaking
loosely. Maybe it would be clearer if "generator" had no meaning; generator functions return generator iterators.
not sure how that would help -- a generator is a type, and it is created by either calling a generator function or a generator expression.
if there is confusion, it's when folks call a generator function a "generator"
Anyway, I just went back and read the PEP, and I'm still confused -- would the PEP make generators behave more like iterator classes, or less like them?