如何使用类型提示来注释返回Iterable
的函数,该函数总是产生两个值:bool
和str
?提示Tuple[bool, str]
很接近,除了它将返回值类型限制为元组,而不是生成器或其他类型的可迭代。
我很好奇,因为我想注释一个用于返回多个值的函数foo()
,如下所示:
always_a_bool, always_a_str = foo()
通常像foo()
这样的函数执行类似return a, b
(返回元组)的操作,但我希望类型提示足够灵活,可以用生成器或列表或其他内容替换返回的元组
答案 0 :(得分:42)
您总是返回一个对象;使用return one, two
只返回一个元组。
是的,-> Tuple[bool, str]
完全正确。
仅 Tuple
类型允许您指定元素的固定数量,每个元素都具有不同的类型。如果你的函数产生一个固定的返回值,特别是当这些值是特定的,不同的类型时,你真的应该返回一个元组。
对于可变数量的元素,其他序列类型应该具有一个类型规范,因此typing.Sequence
不适用于此处。另请参阅What's the difference between lists and tuples?
元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同构序列。 元组有结构,列表有顺序。
Python的类型提示系统遵循这一理念,目前没有语法可以指定固定长度的迭代,并在特定位置包含特定类型。
如果您必须指定任何可迭代的内容,那么您可以做的最好的事情是:
-> Iterable[Union[bool, str]]
此时调用者可以按任何顺序()和未知长度(0到无穷大之间的任何位置)预期布尔值和字符串。