[Python-Dev] yield back-and-forth? (original) (raw)
Guido van Rossum guido at python.org
Fri Jan 20 20:19:30 CET 2006
- Previous message: [Python-Dev] yield back-and-forth?
- Next message: [Python-Dev] yield back-and-forth?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 1/20/06, Phillip J. Eby <pje at telecommunity.com> wrote:
At 10:17 AM 01/20/2006 -0800, Guido van Rossum wrote: >The discussion about PEP 343 reminds me of the following. Bram Cohen >pointed out in private email that, before PEP 342, there wasn't a big >need for a shortcut to pass control to a "sub-generator" because the >following for-loop works well enough: > > def maingenerator(): > ... > for value in subgenerator(): > yield value > >but now that yield can return a value, that value might have to be >passed into subgenerator(), not to mention of exceptions. I'm sure >there's a way to write that (although I haven't found the time to >figure it out) but I expect it to be cumbersome and subtle. I don't >think a helper function can be created to solve this problem, because >the yield syntax is essential. > >Bram suggested the following syntax: > > def maingenerator(): > ... > yieldthrough subgenerator() > >I'm not keen on that particular keyword, but I do believe a syntactic >solution is needed, if the problem is important enough to be solved.
What's the use case for this? In the coroutine use case, the PEP 342 sample trampoline takes care of this. If you yield a sub-generator (i.e. 'yield subgenerator()'), the trampoline effectively replaces the parent with the child until the child is complete.
That's a rather specialized, subtle and elaborate framework though, and at this time I believe it isn't planned to be part of Python 2.5 (right?).
So, that leaves only non-coroutine use cases, and I'm having a hard time thinking of any where there would be bidirectional communication.
Any other use of generators where the return value of yield is used; as soon as you do this you may later want to refactor the code to to include sub-iterators. (There areother uses besides the trampoline, right? :-)
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-Dev] yield back-and-forth?
- Next message: [Python-Dev] yield back-and-forth?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]