我在python中有一个函数,它可以返回bool或者list,有没有办法使用类型提示来指定返回类型?例如,这是正确的做法吗?
bool
list
def foo(id) -> list or bool: ...
iugsix8n1#
来自文件-活接头类型:联合对象保存对多个类型对象的|(按位或)运算的值。这些类型主要用于类型注解。与typing.Union相比,联合类型表达式启用了更清晰的类型提示语法。|的这种用法是在Python 3.10中添加的,因此表示多个返回数据类型的正确方法是:
|
typing.Union
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__将被设置为相应的值。
__annotations__
>>> foo.__annotations__ {'return': <class 'list'>, 'a': <class 'str'>}
请浏览PEP 483以获取更多关于类型提示的信息。请注意,这只适用于***Python 3.5***及以上版本,这在PEP 484中有明确说明。
ogsagwnx2#
如果有人在这里搜索"如何指定多个返回值的类型?",请使用元组[type_value1, ..., type_valueN]。在Python 3.9+中:
[type_value1, ..., type_valueN]
def f() -> tuple[dict, str]: a = {1: 2} b = "hello" return a, b
在早期版本中,使用typing.Tuple:
typing.Tuple
from typing import Tuple def f() -> Tuple[dict, str]: ...
更多信息:How to annotate types of multiple return values?
7d7tgy0s3#
Python 3.10或更新版本:使用|。例如,一个函数采用int或str作为单个参数,并返回int或str:
int
str
def func(arg: int | str) -> int | str: # ^^^^^^^^^ ^^^^^^^^^ # type of arg return type
对于X | None的特殊情况,可以使用Optional[X]。
X | None
Optional[X]
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
c0vxltue4#
语句def foo(client_id: str) -> list or bool:在求值时等效于def foo(client_id: str) -> list:,因此不会执行您想要的操作。描述“A或B”类型提示的本地方式是Union(感谢Bhargav Rao):
def foo(client_id: str) -> list or bool:
def foo(client_id: str) -> list:
def foo(client_id: str) -> Union[list, bool]:
或者,从Python 3.10及更高版本开始,使用|运算符:
我不想成为“你为什么要这么做”的人,但是也许有2个返回类型并不是你想要的:如果你想返回一个bool来指示某种类型的特殊错误情况,可以考虑使用Exceptions来代替。如果你想返回一个bool作为某种特殊值,也许空列表会是一个很好的表示。你也可以指示None可以与Optional[list]一起返回
None
Optional[list]
4条答案
按热度按时间iugsix8n1#
来自文件-活接头类型:
联合对象保存对多个类型对象的
|
(按位或)运算的值。这些类型主要用于类型注解。与typing.Union
相比,联合类型表达式启用了更清晰的类型提示语法。|
的这种用法是在Python 3.10中添加的,因此表示多个返回数据类型的正确方法是:对于早期版本,请使用
typing.Union
:但是请注意,类型并不是强制的。Python仍然是一种动态类型语言。注解语法的开发是为了在代码发布到生产环境之前的开发过程中提供帮助。正如PEP 484所说,“在运行时不进行类型检查。”
正如您所看到的,我传递了一个int值并返回了一个str,但是
__annotations__
将被设置为相应的值。请浏览PEP 483以获取更多关于类型提示的信息。
请注意,这只适用于***Python 3.5***及以上版本,这在PEP 484中有明确说明。
ogsagwnx2#
如果有人在这里搜索"如何指定多个返回值的类型?",请使用元组
[type_value1, ..., type_valueN]
。在Python 3.9+中:
在早期版本中,使用
typing.Tuple
:更多信息:How to annotate types of multiple return values?
7d7tgy0s3#
Python 3.10或更新版本:使用
|
。例如,一个函数采用int
或str
作为单个参数,并返回int
或str
:对于
X | None
的特殊情况,可以使用Optional[X]
。Python 3.5 - 3.9版本:使用
typing.Union
:c0vxltue4#
语句
def foo(client_id: str) -> list or bool:
在求值时等效于def foo(client_id: str) -> list:
,因此不会执行您想要的操作。描述“A或B”类型提示的本地方式是Union(感谢Bhargav Rao):
或者,从Python 3.10及更高版本开始,使用
|
运算符:我不想成为“你为什么要这么做”的人,但是也许有2个返回类型并不是你想要的:
如果你想返回一个bool来指示某种类型的特殊错误情况,可以考虑使用Exceptions来代替。如果你想返回一个bool作为某种特殊值,也许空列表会是一个很好的表示。你也可以指示
None
可以与Optional[list]
一起返回