请考虑以下功能:
def test(): yield 1
asyncio.iscoroutine()
方法将为方法True
返回test()
。要注意的另一件事是inspect.iscoroutine()
将返回False
。
asyncio
为什么认为这是协程?无论如何,似乎其中之一弄错了。
答案 0 :(得分:1)
这看起来像是新的Python 3.7 asyncio文档中的文档错误。在提问和回答时,new docs说
如果obj是协程对象,则返回True。
此方法与inspect.iscoroutine()不同,因为它返回 对于使用@coroutine装饰的基于生成器的协程,则为true。
如果obj是协程对象,则返回True,该对象可能基于 生成器或异步def协程。
旧文档是正确的; asyncio.iscoroutine
认为任何生成器对象都是协程,而不仅仅是由@coroutine
装饰的生成器函数创建的协程。
在发问者的issue report之后,文档updated已从asyncio.iscoroutine文档中删除“用@coroutine装饰”。我会发布一个显示旧文本的archive.org链接,但是archive.org没有存档该版本。不过,您仍然可以在github修订历史记录或我刚刚链接的提交中看到旧文本。