breaking iteration of generator method

Hans Nowak hans at zephyrfalcon.org
Tue Nov 4 13:08:03 EST 2003


Brian wrote:
> Hello;
> 
> What happens when a program breaks (think keyword 'break') its iteration
> of a generator? Is the old state in the generator preserved?
> 
> Ex:
> 
> # .gen() is generator method.
> 
> for i in myObject.gen():
> 	if i == specialValue:
> 		break
> 
> Do subsequent calls to .gen() start off with new locals? Or, would
> the iteration begin after the yielded 'i' that caused the for-statement
> to exit?

It's easy to find out... :-)

 >>> def g():
...     for i in range(10):
...         yield i
...

 >>> gen = g()
 >>> for x in gen:
...     if x == 4:
...         break
...     else:
...         print x,
...
0 1 2 3
 >>> for x in gen:
...        print x,
...
5 6 7 8 9
 >>>

However, if you use g() rather than an existing generator object, a new 
generator will be created:

 >>> for x in g():
...     if x == 4:
...         break
...     else:
...         print x,
...
0 1 2 3
 >>> for x in g():
...     print x,
...
0 1 2 3 4 5 6 7 8 9
 >>>

HTH,

-- 
Hans (hans at zephyrfalcon.org)
http://zephyrfalcon.org/







More information about the Python-list mailing list