On Tue, Nov 29, 2016 at 7:25 AM, Frank Millman <fr...@chagford.com> wrote: > However, it does not allow you to enumerate over the generator output - > >>>> async def main(): > > ... c = counter(5) > ... async for j, k in enumerate(c): > ... print(j, k) > ... print('done') > ... >>>> >>>> loop.run_until_complete(main()) > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File > "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\asyncio\base_events.py", > line 466, in run_until_complete > return future.result() > TypeError: 'async_generator' object is not iterable >>>> >>>> > > Is there any technical reason for this, or is it just that no-one has got > around to writing an asynchronous version yet?
No one has written an async enumerate afaik. You may be interested in the aitertools package in PyPI: https://pypi.python.org/pypi/aitertools/0.1.0 It also doesn't have an async enumerate. It does have an aiter function that can wrap an ordinary iterable into an async iterable, so one way to write that would be aiter(enumerate(c)), with the caveat that the wrapped iterator is still running synchronously. Otherwise, you can write one yourself. This doesn't support all the features of enumerate, but it serves as demonstration: from itertools import count async def aenumerate(aiterable): counter = count() async for x in aiterable: yield next(counter), x -- https://mail.python.org/mailman/listinfo/python-list