引入
參考官方文檔 typing 是 3.5 版本的新功能, Python 運作時不強制執行函數和變量類型注解, 但我們寫完代碼一段時間後再回來看我們的代碼, 可能就忘記了自己所寫的函數需要傳什麼參數、傳回什麼類型的結果, 又得去閱讀代碼, 這樣就大大降低了開發的效率, 而 typing 子產品的數顯很好的解決了這個問題
一. typing 的作用
- 類型檢查,防止運作時出現參數和傳回值類型不符合
- 作為開發文檔附加說明,友善使用者調用時傳入和傳回參數類型
- 該子產品加入後并不會影響程式的運作,不會報正式的錯誤,隻有提醒
二. typing 常用的類型
- int, long, float : 整型, 長整形, 浮點型
- bool, str : 布爾型, 字元串類型
- List, Tuple, Dict, Set : 清單, 元組, 字典, 集合
- Iterable, Iterator : 可疊代類型, 疊代器類型
- Generator :生成器類型
三. typing 子產品的常用方式
1.簡單的使用方式
def add(name:str,age:int=22)->str:
return f"名字:{name} 年齡:{age}"
print(add("派大星")) # 名字:派大星 年齡:22
2.類型檢查說明
- 在傳入參數時通過
的形式聲明參數的類型[參數名] : [類型]
- 傳回結果通過
的形式聲明結果的類型->[結果類型]
- 在調用的時候如果參數的類型不正确pycharm會有提醒,但不會影響程式的運作
- 對于如 list ,tuple…等,還可以規定得更加具體一些,如:
, 規定傳回的是清單,并且元素是字元串-> List[str]
3.比較複雜一點點的使用方式
from typing import List,Tuple,Dict
def add(name:str,age:int,height:float,sex:bool=True)->Tuple[List,Tuple,Dict,bool]:
list1 = [name,age,height,sex]
tuple1 = [1,2,3,4]
dic1 = {"name":name,"age":age}
return list1,tuple1,dic1,sex
print(add("派大星",22,1.72,True))
# (['派大星', 22, 1.72, True], [1, 2, 3, 4], {'name': '派大星', 'age': 22}, True)
三,函數注解檢視 __annotation__
函數的注解資訊都儲存在
__annotation__
屬性中, 它是一個字典, 包括傳回值類型聲明
def bar(name:str,age:int)->str:
return f"名字:{name} 年齡:{age}"
print(bar.__annotations__)
# {'name': <class 'str'>, 'age': <class 'int'>, 'return': <class 'str'>}
四.類型别名
把類型賦給别名,就可以定義類型别名, 類型别名适用于簡化複雜的類型簽名
1.簡單類型别名示例
from typing import List
Li = List[str] # 這裡 Li 和 List[str] 的意義是相同的
def add(name:str,age:int)->Li:
return [name]
print(add("shawn",22)) # ['shawn'] (清單類型隻支援一個元素, 不然報錯)
2.複雜的類型别名示例
from typing import List,Tuple,Dict
People = Tuple[str,int]
Other = Dict[str,int]
Info = Tuple[People,Other]
def add(name:str,info:Info)->None: # 這種寫法等同于下面的寫法
...
def add2(name:str,info:Tuple[Tuple[str,int],Dict[str,int]])->None:
...
官方文檔 : https://docs.python.org/zh-cn/3/library/typing.html#module-typing