你总是返回一个对象;usingreturn one, two
只返回一个元组。
所以是的,-> Tuple[bool, str]
完全正确。
只有Tuple
类型允许您指定固定数量的元素,每个元素都有不同的类型。如果你的函数产生固定数量的返回值,尤其是当这些值是特定的、不同的类型时,你真的应该总是返回一个元组。
其他序列类型预计对可变数量的元素具有一种类型规范,因此typing.Sequence
不适合此处。另请参阅列表和元组之间的区别是什么?
元组是异构数据结构(即它们的条目具有不同的含义),而列表是同构序列。元组有结构,列表有顺序。
Python 的类型提示系统遵循这一理念,目前没有语法来指定固定长度的迭代并在特定位置包含特定类型。
如果您必须指定任何可迭代的都可以,那么您可以做的最好的事情是:
-> Iterable[Union[bool, str]]
在这一点上,调用者可以期待任何顺序的布尔值和字符串,并且长度未知(0到无穷大之间的任意位置)。
最后但同样重要的是,从 Python 3.9 开始,您可以使用
-> tuple[bool, str]
而不是-> Tuple[bool, str]
; 大多数标准库容器类型都添加了对类型提示符号的支持(完整列表请参见PEP 585)。事实上,你也可以从 Python 3.7 开始使用它,只要你from __future__ import annotations
为你的模块使用编译器开关和一个支持语法的类型检查器。