Python 的协程类型在哪里定义的?

set*_*son 3 python async-await python-3.4 python-asyncio python-3.5

我正在研究 Python 3.5.1,我希望能够判断一个函数是否作为协程对象返回,但我找不到协程类型的定义位置,最近我一直在使用下面的代码片段来获取通过用函数实例化协程来确定类型。

async def _f():
    pass
COROUTINE_TYPE = type(_f())
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法来做到这一点,我的问题是这种类型在哪里定义以便我可以直接使用它?

dir*_*irn 6

判断一个函数是否是协程的最佳方法是使用asyncio.iscoroutinefunction

asyncio.iscoroutinefunction(some_func)
Run Code Online (Sandbox Code Playgroud)


use*_*ica 6

可能访问协程类型的最佳方法是通过types模块:

import types

types.CoroutineType  # here it is
Run Code Online (Sandbox Code Playgroud)

这实际上并不是定义协程类型的地方-types.py与您正在做的事情几乎相同 - 但它是访问类型的标准 Python 级别方式。

如果您想查看类型的实际定义,那就是在Include/genobject.hand 中Objects/genobject.c。寻找说PyCoroWhatever或的部分coro_whatever

  • @Oasiscircle:我不是在质疑你的能力,只是为未来的网站访问者提供信息。 (2认同)