如何为包含相同元素类型的不同可迭代类型添加类型注解?
解决Union与泛型容器的类型标注错误
你的问题出在泛型参数的作用范围上:Union[List, Tuple][int, float]的写法是错误的,因为Union本身不是泛型类,无法直接通过下标指定元素类型。正确的做法是给每个容器类型单独指定泛型参数,再用Union包裹。
正确写法
from typing import List, Tuple, Union def some(arg: Union[List[Union[int, float]], Tuple[Union[int, float], ...]]): pass
关键说明
- 针对
List:用List[Union[int, float]]明确表示元素为整数或浮点数的列表 - 针对
Tuple:- 若为任意长度的元组(元素均为int/float),需写
Tuple[Union[int, float], ...] - 若为固定长度元组,比如2个元素,可写
Tuple[Union[int, float], Union[int, float]]
- 若为任意长度的元组(元素均为int/float),需写
- 用
Union包裹两个容器类型,即可表示参数可以是符合条件的列表或元组
Python 3.9+ 简化写法
如果使用Python 3.9及以上版本,可直接用内置类型替代typing模块的泛型,写法更简洁:
def some(arg: list[int | float] | tuple[int | float, ...]): pass
内容的提问来源于stack exchange,提问作者Dimon agon IO_04
相关产品推荐
相关产品推荐

