Michael Hudson wrote: > This is, to me, neat and clear. I don't find the idea that iterators > are tied to exactly 1 for loop an improvement (even though they > usually will be).
To fix this in a fully backward-compatible way, we need some way of distinguishing generators that expect to be finalized. Suppose we leave the 'yield' statement alone, and introduce a new statement 'suspend', which alone has the new capabilities of (1) allowing injection of exceptions (2) ability to return a value (3) permissibility in a try-finally Doing throw() on a generator that is stopped at a yield statement would simply raise the exception without changing the state of the generator. So the for-loop could be made to finalize by default, and existing generators would be unaffected. A with-statement generator would then look like @with_template def foo(): initialize() try: suspend finally: finalize() which I think looks quite nice, because 'suspend' seems more suggestive of what is happening when you're not yielding a value. The same thing applies to coroutine-type applications. For partial iteration of new-style generators, there could be a new statement for var from expr: ... or maybe just a wrapper function for var in partial(expr): ... -- Greg Ewing, Computer Science Dept, +--------------------------------------+ University of Canterbury, | A citizen of NewZealandCorp, a | Christchurch, New Zealand | wholly-owned subsidiary of USA Inc. | [EMAIL PROTECTED] +--------------------------------------+ _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com