【发布时间】:2023-02-14 00:31:28
【问题描述】:
我无法理解提示 Coroutine 的类型。据我了解,当我们这样声明一个函数时:
async def some_function(arg1: int, arg2: str) -> list:
...
我们有效地声明一个函数,该函数返回一个协程,在等待时返回一个列表。因此,输入提示的方式是:
f: Callable[[int, str], Coroutine[???]] = some_function
但是 Coroutine 泛型类型有 3 个参数!如果我们转到typing.py 文件,我们可以看到它:
...
Coroutine = _alias(collections.abc.Coroutine, 3)
...
还有Awaitable类型,逻辑上应该是 Coroutine 的父级,只有一个通用参数(我想是返回类型):
...
Awaitable = _alias(collections.abc.Awaitable, 1)
...
因此,以这种方式键入提示函数可能或多或少是正确的:
f: Callable[[int, str], Awaitable[list]] = some_function
或者是吗?
所以,基本上,问题是:
- 在类型提示
async def函数的情况下,可以使用Awaitable而不是Coroutine吗? -
Coroutine泛型类型的正确参数是什么?它的用例是什么?
【问题讨论】:
标签: python python-asyncio coroutine type-hinting