mypy类型检查时list[int,...]报错但tuple[int,...]正常的原因
原因说明
这是Python类型标注规则里list和tuple的语义差异导致的,两者的类型参数定义完全不同:
list是可变同质序列,类型标注仅接受1个类型参数,用来指定列表中所有元素的统一类型,没有用...表示长度的语法。你写的list[int, ...]传入了2个参数,不符合list的类型签名,mypy会直接抛出参数数量不匹配的错误。正确的整数列表标注写法是list[int]。tuple是不可变序列,支持两种标注模式:- 定长定类元组:按顺序写出每个位置的元素类型,比如
tuple[int, str, bool]对应长度为3、三个位置元素分别为int/str/bool的元组 - 不定长同质元组:固定用
[元素类型, ...]的格式,表示元组长度任意、所有元素均为指定类型,这里的...是tuple类型专属的语法标记,所以tuple[int, ...]是合法写法,mypy不会报错。
- 定长定类元组:按顺序写出每个位置的元素类型,比如
修正后的可正常通过mypy检查的代码如下:
a: list[int] = [1,2,3,4,5] print(a) b: tuple[int, ...] = (1,2,3,4,5) print(b)
内容的提问来源于stack exchange,提问作者Yokesh Chowdary
相关产品推荐
相关产品推荐

