PEP 342 misunderstanding

Fredrik Lundh fredrik at pythonware.com
Sun Oct 8 21:47:43 CEST 2006


metamoof at gmail.com wrote:

>>>> def printrange():
> ...     for x in range(10):
> ...         x = yield x
> ...         print x
> ...
>>>> g = printrange()
>>>> for x in g:
> ...     g.send(x*2)
> ...
> 0
> 1
> None
> 4
> 3
> None
> 8
> 5
> None
> 12
> 7
> None
> 16
> 9
> None
> 
> Now, I was expecting that to be 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20.
> 
> What am I missing here?

the output doesn't match your sample program; I assume you left out a 
print statement or two from the second loop.

what you seem to be missing is that "next" (which is called by the 
for-in loop) is basically the same thing as "send(None)".  in other
words, you end up pulling two items from the generator for each iteration.

</F>




More information about the Python-list mailing list