Python之Typing

2022-10-10 10:58:57

作用

  • 类型检查,防止运行时出现参数和返回值类型不符合。
  • 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
  • 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。

note:
typing模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查

Tuple、NamedTuple

Tuple、元组,是 tuple 的泛型,其后紧跟一个方括号,方括号中按照顺序声明了构成本元组的元素类型,如 Tuple[X, Y] 代表了构成元组的第一个元素是 X 类型,第二个元素是 Y 类型。

Dict、Mapping、MutableMapping

Dict、字典,是 dict 的泛型;Mapping,映射,是 collections.abc.Mapping 的泛型。根据官方文档,Dict 推荐用于注解返回类型,Mapping 推荐用于注解参数。它们的使用方法都是一样的,其后跟一个中括号,中括号内分别声明键名、键值的类型。MutableMapping 则是 Mapping 对象的子类,在很多库中也经常用 MutableMapping 来代替 Mapping。

Set、AbstractSet

Set集合,是 set 的泛型;AbstractSet、是 collections.abc.Set 的泛型。根据官方文档,Set 推荐用于注解返回类型,AbstractSet 用于注解参数。

Sequence

Sequence,是 collections.abc.Sequence 的泛型,在某些情况下,我们可能并不需要严格区分一个变量或参数到底是列表 list 类型还是元组 tuple 类型,我们可以使用一个更为泛化的类型,叫做 Sequence。

def square(elements: Sequence[float]) -> List[float]:
 return [x ** 2 for x in elements]

NoReturn

NoReturn,当一个方法没有返回结果时,为了注解它的返回类型,我们可以将其注解为 NoReturn。

def hello() -> NoReturn:
 print('hello')

Any

Any,是一种特殊的类型,它可以代表所有类型,静态类型检查器的所有类型都与 Any 类型兼容,所有的无参数类型注解和返回类型注解的都会默认使用 Any 类型,也就是说,下面两个方法的声明是完全等价的。

def add(a):
 return a + 1
 
def add(a: Any) -> Any:
 return a + 1

TypeVar

TypeVar,来自定义兼容特定类型的变量。

height = 1.75
Height = TypeVar('Height', int, float, None)
def get_height() -> Height:
 return height

NewType

NewType,声明一些具有特殊含义的类型,帮助函数创建新的数据类型
from typing import NewType

Person = NewType('Person', Tuple[str, int, float])
person = Person(('Mike', 22, 1.75))

Callable

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
  • 作者:竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
  • 原文链接:https://renwoxing.blog.csdn.net/article/details/104666542
    更新时间:2022-10-10 10:58:57