Python 3.6
有人可以解释这个控制台输出吗?
刚开始查看asyncio的内容,虽然我确认如何创建协同程序等。似乎使用def
始终会为您提供课程function
>>> async def test():
... pass
...
>>> type(test)
<class 'function'> # Why not 'coroutine'?
>>> def test():
... yield
...
>>> type(test)
<class 'function'>
>>> test = (i for i in range(0))
>>> type(test)
<class 'generator'> # Expected
>>> def test():
... for i in range(0):
... yield i
...
>>> type(test)
<class 'function'> # Why not 'generator'?
答案 0 :(得分:4)
你仍然有常规功能。这些函数生成一个生成器或协同程序,它们本身不是生成器或协同程序。
将生成器函数与返回生成器表达式的函数进行比较:
def test():
return (i for i in range(0))
就像使用yield
的函数一样,上面的函数只在你调用它时产生生成器;这可以让你生成多个独立的生成器;另一方面,生成器表达式只能迭代一次。
同样适用于协同程序。您可以生成一个不使用async
返回协程的函数:
def test():
return asyncio.sleep(0)
异步函数或生成器函数的作用是充当工厂;您可以重复调用它们来生成新的协程或生成器。