我正在使用Python 3.5.1,我希望能够判断一个函数是否已作为协程对象返回,但是我无法找到协程类型的定义,而不是我已经定义了#ve;一直使用下面的代码片段来通过实例化一个带有函数的协程来获取类型。
async def _f():
pass
COROUTINE_TYPE = type(_f())
必须有更好的方法来做到这一点,我的问题是这种类型定义在哪里,所以我可以直接使用它?
答案 0 :(得分:4)
判断函数是否是协程的最佳方法是使用asyncio.iscoroutinefunction
。
asyncio.iscoroutinefunction(some_func)
答案 1 :(得分:3)
访问协程类型的最佳方法可能是通过types
模块:
import types
types.CoroutineType # here it is
这实际上并不是协程类型定义的地方 - types.py
与你正在做的事情完全相同 - 但它是标准的Python级别的方式< em> access 类型。
如果您想查看该类型的实际定义,请参阅Include/genobject.h
和Objects/genobject.c
。查找说PyCoroWhatever
或coro_whatever
。
答案 2 :(得分:0)
Python的协程类型在_collections_abc
中定义,collections.abc
导入asyncio.coroutines,{{3}}本身导入{{3}}。
不知道这对@dirn的答案有多大帮助(这是如何判断一个函数是一个协程)。