typing 类型提示(type hints)
python 是弱类型语言,添加参数与返回值类型提示,可提高代码可读性, 并且在IDE环境支持类型检查
常用类型
int,long,float: 整型,长整形,浮点型;
bool,str: 布尔型,字符串类型;
List, Tuple, Dict, Set:列表,元组,字典, 集合;
Iterable,Iterator:可迭代类型,迭代器类型;
Generator:生成器类型;
类型别名
可将特殊类型赋予别名, 从而指定类型名
Vector = List[float] #指定一个元素全是float类型的列表
ConnectionOptions = dict[str, str]
Address = tuple[str, int]
Server = tuple[Address, ConnectionOptions]
NewType
用于创建自己的类型
from typing import NewType
UserId = NewType('UserId', int)
some_id = UserId(524313)
Any
兼容所有类型
NoReturn
标记没有返回值的函数特殊类型
TypeAlias
显示声明类型别名
from typing import TypeAlias
Factors: TypeAlias = list[int]
Tuple
元组类型
Tuple[X,Y] 二项元组类型
Tuple[X,Y,Z] 二项元组类型
Union
参数类型必须是某一种,不可继承
Union[Union[int, str], float] == Union[int, str, float]
Union[int] == int
Union[int, str, int] == Union[int, str] == int | str
Union[int, str] == Union[str, int]
Optional
可选参数
Type
可接受指定类作为参数
class User: ...
class BasicUser(User): ...
class ProUser(User): ...
class TeamUser(User): ...
# Accepts User, BasicUser, ProUser, TeamUser, ...
def make_new_user(user_class: Type[User]) -> User:
return user_class()
Literal
对给定参数进行类型验证
def validate_simple(data: Any) -> Literal[True]: # always returns True
pass
MODE = Literal['r', 'rb', 'w', 'wb']
def open_helper(file: str, mode: MODE) -> str:
pass
open_helper('/some/path', 'r') # Passes type check
open_helper('/other/path', 'typo') # Error in type checker
Final
告知类型检查器某名称不能再次赋值或在子类中重写的特殊类型构造器
TypedDict(dict)
TypedDict 声明一个字典类型,该类型预期所有实例都具有一组键集,其中,每个键都与对应类型的值关联。运行时不检查此预期,而是由类型检查器强制执行
class Point2D(TypedDict):
x: int
y: int
label: str
a: Point2D = {'x': 1, 'y': 2, 'label': 'good'} # OK
b: Point2D = {'z': 3, 'label': 'bad'} # Fails type check
assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
网友评论