typing 是python3.5中开始新增的专用于类型注解(type hints)的模块,为python程序提供静态类型检查
Union
Union,联合类型,Union[X, Y] 代表要么是 X 类型,要么是 Y 类型。 联合类型的联合类型等价于展平后的类型:
Union[Union[int, str], float] == Union[int, str, float]
仅有一个参数的联合类型会坍缩成参数自身,比如:
Union[int] == int
多余的参数会被跳过,比如:
Union[int, str, int] == Union[int, str]
在比较联合类型的时候,参数顺序会被忽略,比如:
Union[int, str] == Union[str, int]
这个在一些方法参数声明的时候比较有用,比如一个方法,要么传一个字符串表示的方法名,要么直接把方法传过来:
def process(fn: Union[str, Callable]):
if isinstance(fn, str):
# str2fn and process
pass
elif isinstance(fn, Callable):
fn()
Optional
Optional,可选类型, Optional[X] 等价于 X | None (或 Union[X, None] )。 意思是说这个参数可以为空或已经声明的类型。
但值得注意的是,这个并不等价于可选参数,当它作为参数类型注解的时候,不代表这个参数可以不传递了,而是说这个参数可以传为 None。
如当一个方法执行结果,如果执行完毕就不返回错误信息, 如果发生问题就返回错误信息,则可以这么声明:
def judge(result: bool) -> Optional[str]:
if result: return 'Error Occurred'
例子
#Optional
from typing import Optional
def foo_v2(a: int, b: Optional[int] = None):
if b:
print(a + b)
else:
print("parameter b is a NoneType!")
#只传入a位置的实参
foo_v2(2)
# 输出
>>> parameter b is a NoneType!