need help on need help on generator...
Terry Reedy
tjreedy at udel.edu
Sat Jan 22 18:36:12 EST 2005
"Francis Girard" <francis.girard at free.fr> wrote in message
news:200501221106.49241.francis.girard at free.fr...
>If I understand correctly,
Almost...
> a "generator" produce something over which you can
> iterate with the help of an "iterator".
To be exact, the producer is a generator function, a function whose body
contains 'yield'. In CPython, the difference after executing the def is
that a generator function has a particular flag set. People sometimes
shorten 'generator function' to 'generator' as you did, but calling both a
factory and its products by the same name is confusing. (For instance, try
calling an automobile factory an automobile).
>>> def genf(): yield 1
...
>>> genf
<function genf at 0x008873B8>
The result of calling a generator function is a generator, which is one but
only one type of iterator.
>>> gen = genf()
>>> gen
<generator object at 0x008781F8>
>>> dir(gen)
[<stuff inherited from object>, '__iter__', ' gi_frame', 'gi_running',
'next']
The .__iter__ and .next methods make this an iterator. The two data
attributes are for internal use.
> Can you iterate (in the strict sense
>of an "iterator") over something not generated by a "generator" ?
Of course. Again, a generator is one specific type of iterator, where an
iterator is anything with the appropriate .__iter__ and .next methods.
Terry J. Reedy
More information about the Python-list
mailing list