前言
typing 是在 python 3.5 才有的模块
前置学习
Python 类型提示:javascript:void(0)
常用类型提示
NewType
可以自定义创一个新类型
- 主要用于类型检查
- NewType(name, tp) 返回一个函数,这个函数返回其原本的值
- 静态类型检查器会将新类型看作是原始类型的一个子类
- tp 就是原始类型
实际栗子
# NewType from typing import NewType UserId = NewType('UserId', int) def name_by_id(user_id: UserId) -> str: print(user_id) UserId('user') # Fails type check num = UserId(5) # type: int name_by_id(42) # Fails type check name_by_id(UserId(42)) # OK print(type(UserId(5))) # 输出结果 42 42 <class 'int'>
可以看到 UserId 其实也是 int 类型
类型检查
使用 UserId 类型做算术运算,得到的是 int 类型数据
# 'output' is of type 'int', not 'UserId' output = UserId(23413) + UserId(54341) print(output) print(type(output)) # 输出结果 77754 <class 'int'>
Callable
TypeVar 泛型
Any Type
Union
Optional