首页 > 解决方案 > 为什么 List 不能包含多种类型?

问题描述

您可以在元组或列表中混合类型。为什么不能在输入提示中指定?

>>> from typing import Tuple, List
>>> t = ('a', 1)
>>> l = ['a', 1]

>>> t2: Tuple[str, int] = ('a', 1)
>>> l2: List[str, int] = ['a', 1]

TypeError: Too many parameters for typing.List; actual 2, expected 1

标签: pythonpython-3.xtype-hinting

解决方案


在类型论中,列表是包含一种类型值的同质结构。因此,List只需要一种类型,并且该列表的每个元素都必须具有该类型。

但是,类型理论也提供了 sum 类型,您可以将其视为从某些固定类型集中选择的一个值的包装器。支持 sum 类型typing.Union。要指定列表是intstr值的混合,请使用

List[Union[str, int]]

作为类型提示。

相比之下,元组是产品类型的一个示例,一种由一组固定类型组成的类型,其值是值的集合,来自产品类型中的每个类型。Tuple[int,int,int]Tuple[str,int]并且Tuple[int,str]都是不同的类型,通过产品中的类型数量和它们出现的顺序来区分。


推荐阅读