"Francis Girard" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
>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 -- http://mail.python.org/mailman/listinfo/python-list