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

新手上路,请多包涵

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

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

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

原文由 Yahya Uddin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 768
2 个回答

文档

班级 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 了解更多关于类型提示的信息。另请参阅 什么是 Python 3.5 中的类型提示? ?

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


从 Python 3.10 开始,有一种新的方式来表示这个联合。请参阅 联合类型

联合对象保存 | 的值对多个类型对象的(按位或)操作。这些类型主要用于类型注释。与 typing.Union 相比,联合类型表达式支持更清晰的类型提示语法。

正如我们所看到的,这与以前版本中的 typing.Union 完全相同。可以修改我们之前的示例以使用此表示法:

 def foo(client_id: str) -> list | bool:

原文由 Bhargav Rao 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 from typing import Tuple

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

更多信息: 如何注释多个返回值的类型?

原文由 Anton Khodak 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题