Python_Typing
Python typing
基本用法
导入类型:
1 | from typing import ... |
List(列表):
1 | var: List[int or float] = [2, 3.5] |
Tuple(元组):
1 | person: Tuple[str, int, float] = ('Mike', 22, 1.75) |
Dict(字典):
1 | def size(rect: Mapping[str, int]) -> Dict[str, int]: |
Set(集合):
1 | def describe(s: AbstractSet[int]) -> Set[int]: |
Any(所有类型):
1 | def add(a: Any) -> Any: |
Callable(可调用类型,通常用来注解一个方法):
1 | def date(year: int, month: int, day: int) -> str: |
Union(联合类型):
1 | Union[int, str] # 要么是 int 类型,要么是 str 类型 |
Optional(参数为空或是已经声明的类型):
1 | Optional[str] == Union[str, None] # 不代表这个参数可以不传递了,而是说这个参数可以传为 None |
TYPE_CHECKING
TYPE_CHECKING 是一个会被第三方静态类型检查器假定为 True 的特殊常量,而在运行时将假定为 False。
TYPE_CHECKING 作为一个静态检查的标志,在真正运行代码的时候它是 False,也就是它下面的 import 是不执行的,但它可以为第三方静态类型检查器提供所需要检查的类型。
使用场景:
解决循环导入问题:两个文件相互导入引用,如果不使用 if typing.TYPE_CHECKING: 就直接导入,那么此时就会因为循环导入产生错误。
注意:使用 TYPE_CHECKING 导入的任何对象,只能作为注解使用,不可以真的去使用这些对象,因为这些对象只有在编辑器检查的阶段才会被导入,并且在使用这些类型作为解注时,必须使用引号包裹。否则在真正的代码业务执行时,就会抛出 NameError: xxx is not defined 错误。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!