前言
typing 是在 python 3.5 才有的模塊
前置學習
Python 類型提示:https://www.cnblogs.com/poloyy/p/15145380.html
常用類型提示
https://www.cnblogs.com/poloyy/p/15150315.html
類型別名
https://www.cnblogs.com/poloyy/p/15153883.html
NewType
https://www.cnblogs.com/poloyy/p/15153886.html
Callable
https://www.cnblogs.com/poloyy/p/15154008.html
TypeVar 泛型
https://www.cnblogs.com/poloyy/p/15154196.html
Any Type
https://www.cnblogs.com/poloyy/p/15158613.html
Union
https://www.cnblogs.com/poloyy/p/15170066.html
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
使用默認參數的寫法
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]]