On Tue, Sep 6, 2016 at 9:27 AM, Sven R. Kunze
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