【发布时间】:2021-03-02 06:00:59
【问题描述】:
我有一个函数可以接受任何可以索引的变量作为输入,例如列表或元组。如何在函数的类型提示中指出这一点?
【问题讨论】:
标签: python python-3.x type-hinting
我有一个函数可以接受任何可以索引的变量作为输入,例如列表或元组。如何在函数的类型提示中指出这一点?
【问题讨论】:
标签: python python-3.x type-hinting
您的方法接受sequence,因此请使用typing.Sequence。这是通用的,因此您可以指定序列必须包含的对象类型:
from typing import Sequence
def foo(bar: Sequence[int]):
# bar is a sequence of integers
一个支持通过
__getitem__()特殊方法使用整数索引进行有效元素访问的可迭代对象,并定义了一个返回序列长度的__len__()方法。一些内置的序列类型是list、str、tuple和bytes。
【讨论】:
Any,所以bar: Sequence和bar: Sequence[Any]是等价的。
list 和tuple 但不包含str 和bytes 的类型?还是应该在这种情况下只使用Union[list, tuple]?
str 是 Sequence[str] 类型,如果需要 Sequence[int],则不可接受。反之亦然,bytes 是 Sequence[int] 类型,如果您尝试将它与需要 Sequence[str] 的函数一起使用,则会被拒绝。两者都是不可变类型,因此MutableSequence[int] 或MutableSequence[str] 都不会接受(但bytearray 可以接受MutableSequence[int])。