[Python-Dev] Coroutines, generators, function calling (original) (raw)

Phillip J. Eby pje at telecommunity.com
Tue Oct 18 17:26:04 CEST 2005


At 12:01 PM 10/18/2005 +0100, Gustavo J. A. M. Carneiro wrote:

def showmessage(msg): win = createwindow(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.

Just 'yield animate(win, xrange(10))' and have the trampoline recognize generators. See the PEP 342 trampoline example, which does this. When the animate() is exhausted, it'll resume the "calling" 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?

Yes, it's 'yield' at the function calling. :)



More information about the Python-Dev mailing list