常用类型提示
int、float、long
bool、str List、Dict、Tuple、Set Iterable、Iterator:可迭代类型、迭代器类型 Generator:生成器类型
from typing import List, Set, Tuple# a为int型、b为字符串类型、f为浮点型、b为布尔型、d为字典、s为集合、ll为列表def add(a: int, string: str, f: float, b: bool, d: dict, s: set, ll: list):return(a, string, f, b, d, s, ll)# 嵌套类型 List类型嵌套子类型strdef notice(name: List[str], info: Tuple[int, str]):print(f"name: {name}, info: {info}")
类型别名
把类型赋给别名,就可以定义类型别名
# 类型别名Connectionoptions = Dict[str, str]Address = Tuple[str, int]Server = Tuple[Address, Connectionoptions]def message(message: str, servers: Server):print(message, servers)message_text = "发送信息"servers = (("127.0.0.1", 8080), {"name": "zaygee"})message(message_text, servers)# 发送信息 (('127.0.0.1', 8080), {'name': 'zaygee'})
NewType
NewType可辅助创建不同的类型,NewType(name, tp)返回一个函数,这个函数返回其原本的值
from typing import NewTypeUserId = NewType("User", int)id = UserId(4444)print(type(id))# <class 'int'>
可调对象-Callable
用 Callable[[Arg1Type, Arg2Type], ReturnType] 实现类型提示
def name(name: str):print(name)# Callable作为函数参数使用def get_name(arg: Callable[[str], None]):return argres = get_name(name)res('zaygee')# 输出# zaygee
泛型-Generic
from typing import TypeVarT = TypeVar('T') # 任意类型N = TypeVar('N', str, bytes) # 指定str或者bytes类型def first(a: T, b: N):print(a, b)
任意类型-Any
静态类型检查器认为所有类型均与 Any 兼容
from typing import Anydef legacy_parser(text: Any) -> Any:...return data
联合类型-Union
联合类型,Union[str, float]表示可以是字符串类型也可以是浮点型
from typing import Union# int 或者 strvar = Union[int, str]
可选类型-Optional
可选类型
Optional[str] == Union[int, None]
# 可选类型from typing import Optionaldef test_optional(name: Optional[str] = None):print(name)test_optional()# 输出 None
