[Python-Dev] PEP 492: async/await in Python; version 4

Yury Selivanov yselivanov.ml at gmail.com
Fri May 1 21:23:55 CEST 2015

Let's say it this way: I want to know what I am looking at
when I browse through the code -- an asynchronous iterator,
or a normal iterator.  I want an explicit difference between
these protocols, because they are different.

Moreover, the below code is a perfectly valid, infinite

     class SomeIterable:
          def __iter__(self):
              return self
          async def __next__(self):
              return 'spam'

I'm strong -1 on this idea.


On 2015-05-01 3:03 PM, Stefan Behnel wrote:
> Yury Selivanov schrieb am 01.05.2015 um 20:52:
>> I don't like the idea of combining __next__ and __anext__.
>> In this case explicit is better than implicit.  __next__
>> returning coroutines is a perfectly normal thing for a
>> normal 'for' loop (it wouldn't to anything with them),
>> whereas 'async for' will interpret that differently, and
>> will try to await those coroutines.
> Sure, but the difference is that one would have called __aiter__() first
> and the other __iter__(). Normally, either of the two would not exist, so
> using the wrong loop on an object will just fail. However, after we passed
> that barrier, we already know that the object that was returned is supposed
> to obey to the expected protocol, so it doesn't matter whether we call
> __next__() or name it __anext__(), except that the second requires us to
> duplicate an existing protocol.
> This has nothing to do with implicit vs. explicit.
> Stefan
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/yselivanov.ml%40gmail.com

More information about the Python-Dev mailing list