类型定义
类型标注所使用的类型可以是Python内置类型,例如str
、int
等,可以是抽象基类,可以是types
模块中定义的类型,亦或者是用户自定义的类。
为了能够对Python所使用的数据类型进行描述,Python在typings
模块中声明了一系列的特殊类型。其中包括None
、Any
、Tuple
、Union
、Callable
。其中None
与常量None
所表示的意义相同并且可以由常量None
来作为类型标注。
将类型赋予一个变量可以便捷的创建类型别名,例如:Url = str
。类型别名还可以使用更加复杂的类型,例如T = TypeVar('T', int, float, complex)
,表示类型T
可以代表整型、浮点以及复数类型,这就使得T
表现的像是一个泛型中的类型变量一样,而事实也的确如此。
函数类型较为复杂,是使用Callable
来定义的。Callable
使用Callable[[参数1类型, 参数2类型], 返回值类型]
的格式来定义一个函数,其中列表中第一个元素是由函数所接收的全部参数的类型组成的列表,第二个元素是函数返回值的类型。例如:Callable[[int, str], str]
。
以下给出一些常用的类型描述:
类型 | 格式 | 说明 |
---|---|---|
None | None 类型 | |
Any | 任意类型 | |
Union | Union[X, Y] | 联合类型,可能是X 类型或者是Y 类型 |
Tuple | Tuple[X, Y, Z] | 多元素元组类型,一般的元组类型为Tuple[Any, ...] |
Callable | Callable[[X, Y], Z] | 函数类型,第一个序列为参数类型,第二个元素为返回值类型 |
Iterable | Iterable[X] | 序列类型,元素类型为X |
Set | Set[T] | 集合类型,元素类型为T |
Mapping | Mapping[K, V] | 字典类型,键类型为K ,值类型为V |
TypeVar | TypeVar('Name', Types) | 定义类型变量 |
NoReturn | 永远不会返回的函数返回值类型 | |
Optional | Optional[X] | 可空类型,相当于Union[X, None] |
AnyStr | 任意字符串类型,相当于TypeVar('AnyStr', str, bytes) | |
Generator | Generator[Y, S, R] | 生成器类型,其中Y 为抛出类型,S 为发送类型,R 为返回值类型 |