On Tue, 2005-10-18 at 09:07 -0400, Jim Jewett wrote:
>   Suppose now I want to move the window animation to a function, to
> factorize the code:
> 
> def animate(win, steps):
>     for y in steps:
> win.move(0, y*20)
> yield Timeout(0.1)
> 
> def show_message(msg):
>     win = create_window(msg)
>     animate(win, xrange(10)) # slide down
>     yield Timeout(3)
>     animate(win, xrange(10, 0, -1)) # slide up
>     win.destroy()
> 
>   This obviously doesn't work, because calling animate() produces
> another generator, instead of calling the function.  In coroutines
> context, it's like it produces another coroutine, while all I wanted was
> to call a function.
> 
>   I don't suppose there could be a way to make the yield inside the
> subfunction have the same effect as if it was inside the function that
> called it?  Perhaps some special notation, either at function calling or
> at function definition?
> 
> ---------------------------------
> 
> I may be missing something, but to me the answer looks like:
> 
> def show_message(msg):
>     win = create_window(msg)
>     for v in animate(win, xrange(10)):  # slide down
>         yield v
>     yield Timeout(3)
>     for v in animate(win, xrange(10, 0, -1)): # slide up
>         yield v
>     win.destroy()

  Sure, that would work.  Or even this, if the scheduler would
automatically recognize generator objects being yielded and so would run
the the nested coroutine until finish:

def show_message(msg):
    win = create_window(msg)
    yield animate(win, xrange(10)) # slide down
    yield Timeout(3)
    yield animate(win, xrange(10, 0, -1)) # slide up
    win.destroy()

  Sure, it could work, but still... I wish for something that would
avoid creating a nested coroutine.  Maybe I'm asking for too much, I
don't know.  Just trying to get some feedback...

  Regards.

-- 
Gustavo J. A. M. Carneiro
<[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
The universe is always one step beyond logic.

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to