Python-typing模块——Optional 前⾔
typing 是在 python 3.5 才有的模块
前置学习
Python 类型提⽰:
常⽤类型提⽰
类型别名
NewType
Callable
TypeVar 泛型
Any Type
Union
Optional
可选类型
和默认参数有什么不⼀样
官⽅原话:可选参数具有默认值,具有默认值的可选参数不需要在其类型批注上使⽤ Optional,因为它是可选的
不过 Optional 和默认参数其实没啥实质上的区别,只是写法不同
使⽤ Optional 是为了让 IDE 识别到该参数有⼀个类型提⽰,可以传指定的类型和 None,且参数是可选⾮必传的
# 可选参数
def foo(arg: int = 0) -> None:
...
# 不传 arg 默认取 0
foo()
重点
Optional[int] 等价于 Union[int, None]
意味着:既可以传指定的类型 int,也可以传 None
实际栗⼦
def foo_func(arg: Optional[int] = None):
print(arg)
foo_func()
foo_func(1)
# 输出结果
None
1
union是什么类型使⽤默认参数的写法
def foo_func(arg: int = None):
print(arg)
foo_func()
foo_func(1)
# 输出结果
None
1
这种写法,Pycharm 并不会 warning
重点
Optional[] ⾥⾯只能写⼀个数据类型# 正确
Optional[str]
Optional[List[str]]
Optional[Dict[str, Any]]
# 错误
Optional[str, int]
Optional[Union[str, int, float]]