如何在异步 Python 函数中指定 return 类型?
How to specify return type in an async Python function?
在 TypeScript 中,你会做类似的事情
async function getString(word: string): Promise<string> {
return word;
}
如何在 Python 中执行相同的操作?我尝试了以下方法:
async def get_string(word: str) -> Coroutine[str]:
return word
并得到了这个回溯:
TypeError: Too few parameters for typing.Coroutine; actual 1, expected 3
所以 Coroutine
需要 3 种类型。但为什么?在这种情况下它们应该是什么?
这个在the docs里也有说明,但是还是没看懂
示例 in the docs 显示了三种类型:
from typing import List, Coroutine
c = None # type: Coroutine[List[str], str, int]
...
x = c.send('hi') # type: List[str]
async def bar() -> None:
x = await c # type: int
- 如果你发送了一个值,你会得到什么;
- 您可以发送什么价值;和
- 期待已久。
它还链接到 Generator definition,其中包含更多示例和更清晰的定义:
Generator[YieldType, SendType, ReturnType]
在你的情况下,我猜 [None, None, str]
,因为你只关心可等待的值。
您可以将其键入:
async def get_string(word: str) -> str:
return word
并且隐含为 Coroutine[Any, Any, <return_type>]
:
reveal_type(get_string) # Revealed type is "def (word: builtins.str) -> typing.Coroutine[Any, Any, builtins.str]"
之所以Coroutine
需要3个类型参数是因为它类似于一个Generator
(其类型参数是yield、send和return类型),但是Python 相当于 TypeScript 的 Promise<T>
将是 Future[T]
.
即使问题比较老,我认为它仍然缺少一个明确的解释,因为打字稿开发人员可以mind-blowing 掌握这个概念。
async function getString(word: string): Promise<string> {
return word;
}
与 python 中的打字稿不同,您通常不会显式地为协程编写 return 类型,通过使用 async 关键字可以隐式知道 return 类型将是协程
async def get_string(word: str) -> str:
return word
长话短说:
async main():
result = get_string() #result has inferred type of Coroutine[Any, Any, str]
awaited_result = await get_string() #awaited_result has inferred type of str
在 TypeScript 中,你会做类似的事情
async function getString(word: string): Promise<string> {
return word;
}
如何在 Python 中执行相同的操作?我尝试了以下方法:
async def get_string(word: str) -> Coroutine[str]:
return word
并得到了这个回溯:
TypeError: Too few parameters for typing.Coroutine; actual 1, expected 3
所以 Coroutine
需要 3 种类型。但为什么?在这种情况下它们应该是什么?
这个在the docs里也有说明,但是还是没看懂
示例 in the docs 显示了三种类型:
from typing import List, Coroutine c = None # type: Coroutine[List[str], str, int] ... x = c.send('hi') # type: List[str] async def bar() -> None: x = await c # type: int
- 如果你发送了一个值,你会得到什么;
- 您可以发送什么价值;和
- 期待已久。
它还链接到 Generator definition,其中包含更多示例和更清晰的定义:
Generator[YieldType, SendType, ReturnType]
在你的情况下,我猜 [None, None, str]
,因为你只关心可等待的值。
您可以将其键入:
async def get_string(word: str) -> str:
return word
并且隐含为 Coroutine[Any, Any, <return_type>]
:
reveal_type(get_string) # Revealed type is "def (word: builtins.str) -> typing.Coroutine[Any, Any, builtins.str]"
之所以Coroutine
需要3个类型参数是因为它类似于一个Generator
(其类型参数是yield、send和return类型),但是Python 相当于 TypeScript 的 Promise<T>
将是 Future[T]
.
即使问题比较老,我认为它仍然缺少一个明确的解释,因为打字稿开发人员可以mind-blowing 掌握这个概念。
async function getString(word: string): Promise<string> {
return word;
}
与 python 中的打字稿不同,您通常不会显式地为协程编写 return 类型,通过使用 async 关键字可以隐式知道 return 类型将是协程
async def get_string(word: str) -> str:
return word
长话短说:
async main():
result = get_string() #result has inferred type of Coroutine[Any, Any, str]
awaited_result = await get_string() #awaited_result has inferred type of str