Generators versus Coroutines
Lenard Lindstrom
len-1 at telus.net
Sun Aug 15 11:59:25 EDT 2004
More information about the Python-list mailing list
Sun Aug 15 11:59:25 EDT 2004
- Previous message (by thread): Generators versus Coroutines
- Next message (by thread): Generators versus Coroutines
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Nick Patavalis <npat at efault.net> writes: > On 2004-08-14, Paul Rubin <> wrote: > > > > You can't yield across multiple levels of function calls. That's why > > they're called "simple generators" instead of just "generators". > > > > For me it would be *tremendously* usefull if one could yield across > multiple levels of function calls. If this was supported, then most > uses of O/S treads could be replaced by generators. > > Does anyone know if such a feature is planned? > Having followed the development of Prothon it is my understanding that such a thing is not possible in CPython for two reasons. The first is that the yield statement itself defines a function declaration as a generator. Without a specific "gen" declarator keyword as in Prothon: gen evens(n): # This is a generator for i in n: # "for i in range(n)" in Python doubleit(i) def doubleit(i) # This is a helper that yields yield(2 * x) # "yield 2 * x" for i in evens(5): print(i) # "print i" the yield does not know how many function calls up it must go to return a value. In CPython it simply saves one frame, that of the current function call. The second reason is a python function call in CPython involves an actual recursive C call of the interpreter. So to have a yield span more than one python function would require saving and restoring part of the actual C stack - coroutines at the C level - or a rewrite of the interpreter to not make the recursive C calls as in Stackless Python. Lenard Lindstrom <len-l at telus.net>
- Previous message (by thread): Generators versus Coroutines
- Next message (by thread): Generators versus Coroutines
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list