什么类型提示包含列表和元组?

Ere*_*evi 8 python type-hinting python-3.x

我有一个函数可以接受任何可以索引的变量作为输入,例如元组列表.如何在函数的类型提示中指明这一点?

Mar*_*ers 15

你的方法是接受一个序列,所以使用typing.Sequence.这是通用的,因此您可以指定序列必须包含的对象类型:

from typing import Sequence

def foo(bar: Sequence[int]):
    # bar is a sequence of integers
Run Code Online (Sandbox Code Playgroud)

引用Python词汇表:

一个可迭代的,它通过__getitem__()特殊方法使用整数索引支持有效的元素访问,并定义一个__len__()返回序列长度的方法.一些内置序列类型list,str,tuple,和bytes.

  • 是否有包含`list` 和`tuple` 但不包含`str` 和`bytes` 的类型?还是应该在这种情况下使用`Union[list, tuple]`? (3认同)
  • @ ErelSegal-Halevi:不允许指定包含类型; 默认为"Any",所以`bar:Sequence`和`bar:Sequence [Any]`是等价的. (2认同)
  • @Nathan:但是请注意,“str”是“Sequence[str]”类型,如果需要“Sequence[int]”,则不可接受。反之亦然,“bytes”是“Sequence[int]”类型,如果您尝试将其与需要“Sequence[str]”的函数一起使用,则会被拒绝。两者都是不可变类型,因此“MutableSequence[int]”或“MutableSequence[str]”都不会接受(但“bytearray”对于“MutableSequence[int]”来说是可接受的)。 (2认同)