如何使用类型提示指定多种返回类型
- 2024-12-24 08:55:00
- admin 原创
- 63
问题描述:
我在 Python 中有一个函数,它可以返回 abool
或 a list
。有没有办法使用类型提示指定返回类型?
例如,这是正确的方法吗?
def foo(id) -> list or bool:
...
解决方案 1:
来自文档-Union Type:
联合对象保存多个类型对象
|
上的 (按位或) 运算的值。这些类型主要用于类型注释。与 相比,联合类型表达式可以实现更清晰的类型提示语法。typing.Union
这种用法是|
在 Python 3.10 中添加的。因此,表示多种返回数据类型的正确方法是:
def foo(client_id: str) -> list | bool:
对于早期版本,请使用typing.Union
:
from typing import Union
def foo(client_id: str) -> Union[list, bool]:
但请注意,类型检查不是强制的。Python 仍然是一种动态类型语言。注释语法是为了在代码发布到生产环境之前帮助开发代码而开发的。正如PEP 484所述,“运行时不会进行类型检查。”
>>> def foo(a: str) -> list:
... return "Works"
...
>>> foo(1)
'Works'
如您所见,我传递了一个 int 值并返回了一个 str。但是__annotations__
将设置为相应的值。
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
请参阅PEP 483了解有关类型提示的更多信息。另请参阅Python 3.5 中的类型提示是什么??
请注意,此功能仅适用于Python 3.5及更高版本。PEP 484中明确提到了这一点。
解决方案 2:
Python 3.10 或更新版本:使用|
。 例如,一个函数接受一个或int
的参数,str
并返回一个int
或str
:
def func(arg: int | str) -> int | str:
# ^^^^^^^^^ ^^^^^^^^^
# type of arg return type
Python 3.5 - 3.9:使用typing.Union
:
from typing import Union
def func(arg: Union[int, str]) -> Union[int, str]:
# ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
# type of arg return type
对于特殊情况,X | None
您可以使用Optional[X]
。
解决方案 3:
如果有人来这里搜索“如何指定多个返回值的类型?”,请使用元组[type_value1, ..., type_valueN]
。
在 Python 3.9+ 中:
def f() -> tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
在早期版本中,使用typing.Tuple
:
from typing import Tuple
def f() -> Tuple[dict, str]:
...
更多信息:如何注释多个返回值的类型?
解决方案 4:
该语句def foo(client_id: str) -> list or bool:
在评估时等效于def foo(client_id: str) -> list:
,因此不会执行您想要的操作。
描述“A 或 B”类型提示的本机方式是Union(感谢 Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
或者,从Python 3.10 及更高版本开始,使用|
运算符:
def foo(client_id: str) -> list | bool:
我不想成为“你为什么要这样做”的人,但也许有两种返回类型并不是你想要的:
如果您想返回布尔值来指示某种特殊的错误情况,请考虑使用异常。如果您想将布尔值作为某些特殊值返回,也许空列表会是一个很好的表示。您还可以指示可以None
返回Optional[list]
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件