My Generator Paradox!
rrr at ronadam.com
Fri Mar 17 23:30:38 CET 2006
Robert Kern wrote:
> vbgunz wrote:
>> I believe I understand now. the yield keyword is sort of like a cousin
>> to return. return will bring back an object I can work with and so does
>> yield *but* yield's object will most likely support the .next() method.
> No, that's not really how it works. When a generator function is called, it
> returns the generator object immediately. None of the code inside is executed.
> Every time you call that generator function, you get a new generator object with
> the initial state. The objects that are yielded inside the code don't show up yet.
> The code inside the generator gets executed only when the generator object is
> iterated over (or its .next() method is called). The objects that are yielded
> are the results of calling the .next() method.
Maybe this will clarify it further.
>>> def gen(n):
... while 1:
... print 'before yield'
... yield n
... print 'after yield'
>>> g = gen('hello')
When the next() method is called the generator runs until it reaches a
yield. At which point it's rests until the next() method is called again.
Although there are times when I wish it could run (as a thread) until it
reaches a yield and then continue after the next() method is called
until it reaches the next yield.
More information about the Python-list