On Tue, Sep 6, 2016 at 9:27 AM, Sven R. Kunze <srku...@mail.de> wrote: > Hi Yury, > > just for my understanding: > > On 04.09.2016 01:31, Yury Selivanov wrote: >> >> We propose to allow the use of ``await`` expressions in both >> asynchronous and synchronous comprehensions:: >> >> result = [await fun() for fun in funcs] >> result = {await fun() for fun in funcs} >> result = {fun: await fun() for fun in funcs} >> > > This will produce normal lists, sets and dicts, right? > > 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?
AIUI they won't return "async lists" etc; what they'll do is asynchronously return list/set/dict. Imagine an async database query that returns Customer objects. You could get their names thus: names = [cust.name async for cust in find_customers()] And you could enumerate their invoices (another database query) with a double-async comprehension: invoices = {cust.name: await cust.list_invoices() async for cust in find_customers()} As always, you can unroll a comprehension to the equivalent statement form. _tmp = {} async for cust in find_customers(): _tmp[cust.name] = await cust.list_invoices() invoices = _tmp or with the original example: _tmp = [] async for fun in funcs: _tmp.append(await fun()) result = _tmp Hope that helps. ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/