note:
typing模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查
Tuple、元组,是 tuple 的泛型,其后紧跟一个方括号,方括号中按照顺序声明了构成本元组的元素类型,如 Tuple[X, Y] 代表了构成元组的第一个元素是 X 类型,第二个元素是 Y 类型。
Dict、字典,是 dict 的泛型;Mapping,映射,是 collections.abc.Mapping 的泛型。根据官方文档,Dict 推荐用于注解返回类型,Mapping 推荐用于注解参数。它们的使用方法都是一样的,其后跟一个中括号,中括号内分别声明键名、键值的类型。MutableMapping 则是 Mapping 对象的子类,在很多库中也经常用 MutableMapping 来代替 Mapping。
Set集合,是 set 的泛型;AbstractSet、是 collections.abc.Set 的泛型。根据官方文档,Set 推荐用于注解返回类型,AbstractSet 用于注解参数。
Sequence,是 collections.abc.Sequence 的泛型,在某些情况下,我们可能并不需要严格区分一个变量或参数到底是列表 list 类型还是元组 tuple 类型,我们可以使用一个更为泛化的类型,叫做 Sequence。
def square(elements: Sequence[float]) -> List[float]:
return [x ** 2 for x in elements]
NoReturn,当一个方法没有返回结果时,为了注解它的返回类型,我们可以将其注解为 NoReturn。
def hello() -> NoReturn:
print('hello')
Any,是一种特殊的类型,它可以代表所有类型,静态类型检查器的所有类型都与 Any 类型兼容,所有的无参数类型注解和返回类型注解的都会默认使用 Any 类型,也就是说,下面两个方法的声明是完全等价的。
def add(a):
return a + 1
def add(a: Any) -> Any:
return a + 1
TypeVar,来自定义兼容特定类型的变量。
height = 1.75
Height = TypeVar('Height', int, float, None)
def get_height() -> Height:
return height
NewType,声明一些具有特殊含义的类型,帮助函数创建新的数据类型
from typing import NewType
Person = NewType('Person', Tuple[str, int, float])
person = Person(('Mike', 22, 1.75))
Callable,可调用类型,它通常用来注解一个方法.Callable 在声明的时候需要使用 Callable[[Arg1Type, Arg2Type, …], ReturnType] 这样的类型注解,将参数类型和返回值类型都要注解出来.
def date(year: int, month: int, day: int) -> str:
return f'{year}-{month}-{day}'
def get_date_fn() -> Callable[[int, int, int], str]:
return date