On Tue, Sep 6, 2016 at 10:20 AM, Sven R. Kunze <srku...@mail.de> wrote:
> On 06.09.2016 03:16, Yury Selivanov wrote: > >> >> Whereas the following will produce some sort of async lists, sets, and >>> dicts? >>> >>> result = [await fun() async for fun in funcs] >>>> result = {await fun() async for fun in funcs} >>>> result = {fun: await fun() async for fun in funcs} >>>> >>> >>> If so, how do I read values from an async list/set/dict? >>> >> >> Consider "funcs" to be an asynchronous generator/iterable that produces a >> sequence of awaitables. The above comprehensions will await on each >> awaitable in funcs, producing regular list, set, and dict. >> > > So, what's the "async" good for then? Maybe I'm off base here, but my understanding is the `async for` version would allow for suspension during the actual iteration, ie. using the __a*__ protocol methods, and not just by awaiting on the produced item itself. IOW, `[await ... async for ...]` will suspend at least twice, once during iteration using the __a*__ protocols and then again awaiting on the produced item, whereas `[await ... for ...]` will synchronously produce items and then suspend on them. So to use the async + await version, your (async) iterator must return awaitables to satisfy the `async for` part with then produce another awaitable we explicitly `await` on. Can someone confirm this understanding? And also that all 4 combinations are possible, each with different meaning: # Normal comprehension, 100% synchronous and blocking [... for ...] # Blocking/sync iterator producing awaitables which suspend before producing a "normal" value [await ... for ...] # Non-blocking/async iterator that suspends before producing "normal" values [... async for ...] # Non-blocking/async iterator that suspends before producing awaitables which suspend again before producing a "normal" value [await ... async for ...] Is this correct? -- C Anthony
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/