context not cleaned at the end of a loop containing yield?

MRAB google at mrabarnett.plus.com
Thu Mar 26 14:34:32 EDT 2009


TP wrote:
> Hi everybody,
> 
> This example gives strange results:
> 
> ########
> def foo( l = [] ):
> 
>     l2 = l
>     print l2
>     for i in range(10):
>         if i%2 == 0:
>             l2.append( i )
>         yield i
> ########
> 
>>>> [i for i in ut.foo()]
> []
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>> [i for i in ut.foo()]
> [0, 2, 4, 6, 8]
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>> [i for i in ut.foo()]
> [0, 2, 4, 6, 8, 0, 2, 4, 6, 8]
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
> ...
> 
> How to explain this behavior? Why l is not [] when we enter again the
> function foo()?
> 
Read http://www.ferg.org/projects/python_gotchas.html#contents_item_6



More information about the Python-list mailing list