2015-08-27 11 views
6

Не удалось выяснить, как использовать ждать от питона 3.5-RC2Как использовать выражение ожидания?

>>> async def foo(): 
...  pass 
... 
>>> await foo() 
    File "<ipython-input-10-a18cb57f9337>", line 1 
    await foo() 
      ^
SyntaxError: invalid syntax 

>>> c = foo() 
>>> await c 
    File "<ipython-input-12-cfb6bb0723be>", line 1 
    await c 
     ^
SyntaxError: invalid syntax 

>>> import sys 
>>> sys.version 
'3.5.0rc2 (default, Aug 26 2015, 21:54:21) \n[GCC 5.2.0]' 
>>> del c 
RuntimeWarning: coroutine 'foo' was never awaited 
>>> 
+0

Я проверил [PEP 0492] (https://www.python.org/dev/peps/pep-0492/#examples-of-await-expressions) и кажется, что он должен быть действительным. Могли они что-то изменить? – TigerhawkT3

+0

Возможно, он должен быть частью [некоторой более крупной конструкции] (https://docs.python.org/3.6/whatsnew/3.5.html#pep-492-coroutines-with-async-and-await-syntax)? – TigerhawkT3

+0

Вы читали это? https://docs.python.org/3.6/reference/compound_stmts.html#async-def – JeromeJ

ответ

8

Согласно documentation, await можно использовать только внутри функции сопрограммное. Таким образом, правильный синтаксис для его использования должен быть

async def foo(): 
    pass 

async def bar(): 
    await foo() 
+0

Если мне нужно использовать сопрограмму coroutine, мне нужно создать функцию, а затем ждать ее, чтобы получить значение? – balki

+0

Это не обязательно должна быть функция, если она является ожидаемым объектом (то есть нативной и генераторной сопрограммой или объектом с магическим методом '__await__') @balki – Railslide

2

Так же, как в C#, await может быть использован только в качестве async метода (функции).