常用类型提示

int、float、long

bool、str List、Dict、Tuple、Set Iterable、Iterator:可迭代类型、迭代器类型 Generator:生成器类型

  1. from typing import List, Set, Tuple
  2. # a为int型、b为字符串类型、f为浮点型、b为布尔型、d为字典、s为集合、ll为列表
  3. def add(a: int, string: str, f: float, b: bool, d: dict, s: set, ll: list):
  4. return(a, string, f, b, d, s, ll)
  5. # 嵌套类型 List类型嵌套子类型str
  6. def notice(name: List[str], info: Tuple[int, str]):
  7. print(f"name: {name}, info: {info}")

类型别名

把类型赋给别名,就可以定义类型别名

  1. # 类型别名
  2. Connectionoptions = Dict[str, str]
  3. Address = Tuple[str, int]
  4. Server = Tuple[Address, Connectionoptions]
  5. def message(message: str, servers: Server):
  6. print(message, servers)
  7. message_text = "发送信息"
  8. servers = (("127.0.0.1", 8080), {"name": "zaygee"})
  9. message(message_text, servers)
  10. # 发送信息 (('127.0.0.1', 8080), {'name': 'zaygee'})

NewType

NewType可辅助创建不同的类型,NewType(name, tp)返回一个函数,这个函数返回其原本的值

  1. from typing import NewType
  2. UserId = NewType("User", int)
  3. id = UserId(4444)
  4. print(type(id))
  5. # <class 'int'>

可调对象-Callable

用 Callable[[Arg1Type, Arg2Type], ReturnType] 实现类型提示

  1. def name(name: str):
  2. print(name)
  3. # Callable作为函数参数使用
  4. def get_name(arg: Callable[[str], None]):
  5. return arg
  6. res = get_name(name)
  7. res('zaygee')
  8. # 输出
  9. # zaygee

泛型-Generic

  1. from typing import TypeVar
  2. T = TypeVar('T') # 任意类型
  3. N = TypeVar('N', str, bytes) # 指定str或者bytes类型
  4. def first(a: T, b: N):
  5. print(a, b)

任意类型-Any

静态类型检查器认为所有类型均与 Any 兼容

  1. from typing import Any
  2. def legacy_parser(text: Any) -> Any:
  3. ...
  4. return data

联合类型-Union

联合类型,Union[str, float]表示可以是字符串类型也可以是浮点型

  1. from typing import Union
  2. # int 或者 str
  3. var = Union[int, str]

可选类型-Optional

可选类型

Optional[str] == Union[int, None]

  1. # 可选类型
  2. from typing import Optional
  3. def test_optional(name: Optional[str] = None):
  4. print(name)
  5. test_optional()
  6. # 输出 None