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