2016-11-22 4 views
4

Я пытаюсь сделать что-то вроде этого:Как использовать ждать в питона лямбда

mylist.sort(key=lambda x: await somefunction(x)) 

Но я получаю эту ошибку:

SyntaxError: 'await' outside async function 

который имеет смысл, потому что лямбда не ASync ,

Я попытался использовать async lambda x: ..., но это вызывает SyntaxError: invalid syntax.

Pep 492 состояния:

Syntax for asynchronous lambda functions could be provided, but this construct is outside of the scope of this PEP.

Но я не мог узнать, что синтаксис был реализован в CPython.

Есть ли способ объявить асинхронную лямбду или использовать функцию async для сортировки списка?

ответ

8

Вы не можете. Нет async lambda, и даже если бы вы были, вы не передадите его в качестве ключевой функции на list.sort(), так как ключевая функция будет вызываться как синхронная функция и не ожидается. Легко Обходной аннотировать свой список самостоятельно:

mylist_annotated = [(await some_function(x), x) for x in mylist] 
mylist_annotated.sort() 
mylist = [x for key, x in mylist_annotated] 
+0

я получаю 'SyntaxError:«ждут»выражения в постижениях не supported', поэтому я должен был сделать это (для дальнейшего использования): mylist_annotated = [] для й в MyList: mylist_annotated.append ((ждет some_function (х), х)) mylist_annotated.sort() MyList = [х для ключа, х в mylist_annotated] И теперь он работает, благодаря! – iCart

+3

@iCart Правильно, это ограничение в Python 3.5, которое снято в предстоящем Python 3.6. –