On Mon, Aug 23, 2004 at 11:56:04AM -0400, Phillip J. Eby wrote: | >1. The PEP would introduce a new 'builtin' class called 'Cooperate' | > | >2. Generator semantics would be altered so that 'yield X', where X | > is an instance of Cooperate, would automagically propigate to | > the outer-most non-generator. | | Perhaps you mean "inner-most"? Yes. The top-most non-generator on the stack. | It doesn't seem to me to actually help anything. You can already do this | using a simple wrapper object that maintains a stack of active | generators, as I do in 'peak.events'. Could you provide an example? The problem this proposal solves is straight-foward -- it is tedious and slow to have intermediate generators do stuff like: def middle(): """ intermediate generator _only_ sees one and two """ for x in top(): ! if isinstance(x,X): ! yield x print "middle", x yield x This extra step is tedious and also slow; especially if one has lots of yield statements that cooperate. It could be standardized and made a bit snappier if it was built-in behavior. This is an 80/5 proposal. One gets 80% of the happiness, with 5% of the pain. | I was hoping that you had actually come up with a solution for the more | complex problem of suspending *non* generator functions, in a way that | would work with CPython. :( Yes, I know. I'm trying to avoid this much harder problem. Clark
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4