类型定义

类型标注所使用的类型可以是Python内置类型,例如strint等,可以是抽象基类,可以是types模块中定义的类型,亦或者是用户自定义的类。

为了能够对Python所使用的数据类型进行描述,Python在typings模块中声明了一系列的特殊类型。其中包括NoneAnyTupleUnionCallable。其中None与常量None所表示的意义相同并且可以由常量None来作为类型标注。

将类型赋予一个变量可以便捷的创建类型别名,例如:Url = str。类型别名还可以使用更加复杂的类型,例如T = TypeVar('T', int, float, complex),表示类型T可以代表整型、浮点以及复数类型,这就使得T表现的像是一个泛型中的类型变量一样,而事实也的确如此。

函数类型较为复杂,是使用Callable来定义的。Callable使用Callable[[参数1类型, 参数2类型], 返回值类型]的格式来定义一个函数,其中列表中第一个元素是由函数所接收的全部参数的类型组成的列表,第二个元素是函数返回值的类型。例如:Callable[[int, str], str]

以下给出一些常用的类型描述:

类型格式说明
NoneNone类型
Any任意类型
UnionUnion[X, Y]联合类型,可能是X类型或者是Y类型
TupleTuple[X, Y, Z]多元素元组类型,一般的元组类型为Tuple[Any, ...]
CallableCallable[[X, Y], Z]函数类型,第一个序列为参数类型,第二个元素为返回值类型
IterableIterable[X]序列类型,元素类型为X
SetSet[T]集合类型,元素类型为T
MappingMapping[K, V]字典类型,键类型为K,值类型为V
TypeVarTypeVar('Name', Types)定义类型变量
NoReturn永远不会返回的函数返回值类型
OptionalOptional[X]可空类型,相当于Union[X, None]
AnyStr任意字符串类型,相当于TypeVar('AnyStr', str, bytes)
GeneratorGenerator[Y, S, R]生成器类型,其中Y为抛出类型,S为发送类型,R为返回值类型