Python type of `def`



Python 3.6

有人可以解释这个控制台输出吗?

刚开始研究异步的东西,虽然我会确认如何创建协程等。似乎使用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'?

您仍然有常规函数。这些函数生成生成器或协程,它们本身不是生成器或协程。

将生成器函数与返回生成器表达式的函数进行比较:

def test():
return (i for i in range(0))

就像使用yield的函数一样,上面的函数只在你调用它时生成生成器;这允许你生成多个独立的生成器;另一方面,生成器表达式只能迭代一次。

这同样适用于协程。您可以生成一个返回协程的函数,而无需使用async

def test():
return asyncio.sleep(0)

异步函数或生成器函数的要点是充当工厂;您可以反复调用它们以生成新的协程或生成器。

最新更新