如何使用类型提示指定多个返回类型

时间:2015-11-26 18:45:00

标签: python python-3.x return-type type-hinting python-3.5

我在python中有一个函数可以返回boollist。有没有办法使用类型提示指定返回类型。

例如,这是正确的方法吗?

def foo(id) -> list or bool:
      ...

4 个答案:

答案 0 :(得分:149)

来自documentation

  

班级typing.Union

     

联盟类型; Union [X,Y]表示X或Y.

因此,表示多种返回数据类型的正确方法是

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了解有关类型提示的更多信息。另请参阅What are Type hints in Python 3.5

请注意,这仅适用于 Python 3.5 及更高版本。这在PEP 484明确提到。

答案 1 :(得分:13)

评估时的语句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]:

我不想成为“你为什么要这样做”的家伙,但也许有两种回归类型不是你想要的:

如果要返回bool以指示某种特殊错误情况,请考虑使用异常。如果你想将bool作为一些特殊值返回,那么一个空列表可能是一个很好的表示。 您还可以指出None

可以返回Optional[list]

答案 2 :(得分:4)

Python 3.10 (使用|):一个函数示例,该函数采用单个参数(为intstr并返回{ {1}}或int

str

Python 3.5-3.9 (使用def func(arg: int | str) -> int | str: ^^^^^^^^^ ^^^^^^^^^ type of arg return type ):

typing.Union

对于from typing import Union def func(arg: Union[int, str]) -> Union[int, str]: ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ type of arg return type 的特殊情况,您可以使用Optional[X]

答案 3 :(得分:3)

如果有人登陆这里搜索“如何指定多个返回值的类型?”,请使用Tuple[type_value1, ..., type_valueN]

from typing import Tuple

def f() -> Tuple[dict, str]:
    a = {1: 2}
    b = "hello"
    return a, b

更多信息:https://code-examples.net/en/q/2651e60