python3.5通过新的函数定义语法大大扩展了对异步编程的支持。而异步函数以前只是“有好处的生成器”:
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
"""
它们现在有自己的特殊声明语法和特殊行为,它们不再像通常的生成器函数那样可用:
^{pr2}$这是一个关于这些类型之间功能或实际差异的问题,在this StackOverflow answer中讨论过。在
我的问题是:为什么我要使用async def
?它似乎没有提供比@asyncio.coroutine
更多的好处,但却增加了额外的成本
async def
在旧版本中甚至不会解析parse,尽管这可以说是一个特性而不是bug)和
一个可能的答案由Martijn Pieters给出:
事实上,这已经通过新的
async with
和async for
语法来实现,而这些语法并不像装饰生成器那样容易用“附加”解决方案来实现。在相关问题 更多 >
编程相关推荐