[Python-Dev] Re: anonymous blocks
Guido van Rossum
gvanrossum at gmail.com
Thu Apr 28 02:43:19 CEST 2005
> It seems like what you are proposing is a limited form of
> coroutines.
Well, I though that's already what generators were -- IMO there isn't
much news there. We're providing a more convenient way to pass a value
back, but that's always been possible (see Fredrik's examples).
> Allowing 'continue' to have an optional value is elegant syntax.
> I'm a little bit concerned about what happens if the iterator does
> not expect a value. If I understand the PEP, it is silently
> ignored. That seems like it could hide bugs. OTOH, it doesn't seem
> any worse then a caller not expecting a return value.
Exactly.
> It's interesting that there is such similarity between 'for' and
> 'block'. Why is it that block does not call iter() on EXPR1? I
> guess that fact that 'break' and 'return' work differently is a more
> significant difference.
Well, perhaps block *should* call iter()? I'd like to hear votes about
this. In most cases that would make a block-statement entirely
equivalent to a for-loop, the exception being only when there's an
exception or when breaking out of an iterator with resource
management.
I initially decided it should not call iter() so as to emphasize that
this isn't supposed to be used for looping over sequences -- EXPR1 is
really expected to be a resource management generator (or iterator).
> After thinking about this more, I wonder if iterators meant for
> 'for' loops and iterators meant for 'block' statements are really
> very different things. It seems like a block-iterator really needs
> to handle yield-expressions.
But who knows, they might be useful for for-loops as well. After all,
passing values back to the generator has been on some people's wish
list for a long time.
> I wonder if generators that contain a yield-expression should
> properly be called coroutines. Practically, I suspect it would just
> cause confusion.
I have to admit that I haven't looked carefully for use cases for
this! I just looked at a few Ruby examples and realized that it would
be a fairly simple extension of generators.
You can call such generators coroutines, but they are still generators.
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list