Greg Ewing wrote:
I definitely don't want to preclude the implementation from using PyIter_Next, as that would be a major performance hit in the most common case.
We already have a general caveat in the docs saying that an implementation is allowed (or sometimes even required) to bypass normal attribute lookup for special methods defined by the language. You may want to point to that caveat from the PEP:
Being able to use PyIter_Next and the various other typeslots is exactly what that caveat is about.
One way you can make the expansion more explicit about bypassing the instance is to write things like "type(itr).send(itr, val)" instead of "itr.send(val)".
I also don't want to preclude caching a send() method, because in the absence of a __send__ typeslot it's the only way we have of improving performance.
Actually, we do have another way of improving performance - add a typeslot for it :)
That can be left until we find out whether or not the lookup of send() becomes a performance bottleneck for yield-from usage (which I doubt will be the case).