python-typing&type hint

python是动态语言,不用声明类型

# 不使用类型提示

def func(a,b):
  return a+b

func(‘1‘,‘1‘) # ‘11‘
func(1,1)     # 2
func(‘1‘,1)   # 未使用类型提示,代码编辑时不会报错,代码执行时会报错

# 使用类型提示
from typing import overload

@overload
def func(a: int, b: int): pass

@overload
def func(a: str, b: str): pass

def func(a, b):
    return a + b

func(1, ‘1‘)  # 使用类型提示,在代码编辑时就会报错,可以在代码执行前预防可能出现的问题

type hint

提示类型并不是可用类型,如typing.List并不是list的子类,typing.List只是一个type hint,对a参数指定一个type hint,这个type hint会被设置为func方法a入参的type hint属性,执行代码不会其任何作用,但是执行代码过程中可以获取到这个type hint属性,并使用它做一些处理

常见type hint

  • List是list的泛型(泛型:表示某种类型)
  • Tuple是tuple的泛型
  • NamedTuple是collections.namedtupe的泛型
  • Dict是dict的泛型
  • Mapping是collections.Mapping的泛型
  • Set是set的泛型
  • Sequence是collection.Sequence的泛型/tuple+list的泛型
  • NoReturn是无返回的泛型
  • Any是任意类型的泛型
  • TypeVar,可以创建泛型变量,就是传什么泛型就是什么泛型(T = TypeVar(‘T‘))
  • NewType,一个新的泛型,List=NewType(‘List‘, list)``Person=NewType(‘Person‘, int, int)
  • Callable是可调用类型的泛型
  • Union是联合类型
  • Optional是可为空的联合类型
  • Generator是一个生成器类型

每个实际类型都可以声明一个对应的泛型,可以使用实际了类型做type hint,所以很多时候都是直接用实际类型做typehint

typing.Generic

python-typing&type hint

上一篇:C语言----数组(基础篇八)


下一篇:python mock