PEP 342 misunderstanding

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • metamoof@gmail.com

    PEP 342 misunderstanding

    So I've been reading up on all the new stuff in PEP 342, and trying to
    understand its potential. So I'm starting with a few simple examples to
    see if they work as expected, and find they dont.

    I'm basically trying to do the following:

    for x in range(10):
    print x*2

    but coroutine-style.

    My initial try was:
    >>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?

    Moof

  • Fredrik Lundh

    #2
    Re: PEP 342 misunderstandin g

    metamoof@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>

    Comment

    Working...