2017-04-07 66 views
4

我讀過關於新的Python「關鍵字」asyncawait。然而,它們既不是真正的關鍵字,也不是保留在命名空間中什麼是Python中的異步?

>>> import keyword 
>>> keyword.iskeyword("async") 
False 
>>> async 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'async' is not defined 

在這個例子中我希望爲關鍵字TrueSyntaxError

那麼,究竟是Python中的async?怎麼運行的?

+0

'async'只適用於Python 3.5。這是你使用的版本嗎? –

+5

'async'和'await'並不是真正的關鍵字,但它們將在Python 3.7中。 – vaultah

+0

我使用Python 3.6.0 –

回答

4

爲了向下兼容,asyncawait通過ugly tokenizer hack進行分析。內部的async def函數定義,或用於直接async一個def之前,標記生成器取代NAME令牌asyncawaitASYNCAWAIT令牌;在其他上下文中,分詞器發出和await的常規NAME令牌,將它們視爲標識符。

你可以看到,處理它在Parser/tokenizer.c的代碼,你可以找到在PEP 492向後兼容性計劃,介紹了asyncawait語法PEP。