Also, generators cannot yield control while other functions are
executing, unless those functions are themselves expressed as
generators, and the outer generator is written to yield in response
to values yielded by the inner generator. This complicates the
implementation of even relatively simple use cases like asynchronous
communications, because calling any functions either requires the
generator to "block" (i.e. be unable to yield control), or else a
lot of boilerplate looping code must be added around every needed
function call.
It looks like 2.5 fixed that particular issue. (I'm not holding my breath on tail-call optimization, though...)
From PEP 342:
It looks like 2.5 fixed that particular issue. (I'm not holding my breath on tail-call optimization, though...)