Python 3.5では、新しい関数定義構文による非同期プログラミングのサポートが大幅に拡張されました。非同期関数は、以前に単に「メリットとジェネレーター」されたのに対し:なぜ `@ asyncio.coroutine`に` async def`を使用したいのですか?
aysnc def generate_async_native():
"""
A coroutine that returns 1 - 100
This CANNOT be used as a generator, and can ONLY be executed by running it from an event loop
"""
for i in range(100):
await i
この:
def generate_numbers():
"""
Generator function that lazily returns 1 - 100
"""
for i in range 100:
yield i
generate_async = asyncio.coroutine(generate_numbers)
generate_async.__doc__ = """
Coroutine that lazily returns 1 - 100
This can be used interchangeably as a generator or a coroutine
"""
彼らは今、独自の特殊な宣言構文と、彼らはもはや通常の発電機機能として使用可能であることにより、特別な行動を持っていますではないこれらのタイプ間の機能的差異または実際的差異については、this StackOverflow answerで説明しています。
私の質問は、なぜasync def
を使いたいのですか?それは@asyncio.coroutine
以上の追加の利点を提供していないように思えるが、これはあるものの、それ
- 休憩下位互換性(
async def
でのPython 3.5のコードでもは、古いバージョンでを解析していないという点で、追加コストを課し間違いなく機能でありバグではない)、 - は、どのように関数を呼び出すことができるかに柔軟性がないようです。
私は 'syntax'タグを削除し、' python'タグを追加しました。一般に、PythonのタグはすべてのPythonの質問に追加する必要があります。なぜなら、ほとんどの人が追跡しているタグなのでです。 –