【发布时间】:2019-07-10 12:25:19
【问题描述】:
我对 Python 3.6+ 中的以下行为感到困惑:
>>> def f1(): pass
>>> def f2(): yield
>>> async def f3(): pass
>>> async def f4(): yield
>>> inspect.isfunction(f1)
True
>>> inspect.isfunction(f2)
True
>>> inspect.iscoroutinefunction(f3)
True
>>> inspect.iscoroutinefunction(f4)
False
同步函数和生成器函数都被检查视为“函数”,但异步生成器函数不被视为“协程函数”。 这似乎与documentation相反
inspect.iscoroutinefunction(object)如果对象是协程函数(使用 async def 语法定义的函数),则返回 true。
有没有比同时检查iscoroutinefunction 和isasyncgenfunction 更好的方法来检测一个函数是否是用async 定义的,包括生成器函数?
这可能是因为异步生成器只出现在 3.6 中,但仍然令人费解。
【问题讨论】:
标签: python python-3.6 python-asyncio python-3.7 coroutine