python typing模塊--類型提示支持
1、typing介紹
Python
是一門弱類型的語言,很多時候我們可能不清楚函數(shù)參數(shù)的類型或者返回值的類型,這樣會導(dǎo)致我們在寫完代碼一段時間后回過頭再看代碼,忘記了自己寫的函數(shù)需要傳什么類型的參數(shù),返回什么類型的結(jié)果,這樣就不得不去閱讀代碼的具體內(nèi)容,降低了閱讀的速度, typing
模塊可以很好的解決這個問題
注意: typing 模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查
2、typing的作用
- 類型檢查,防止運行時出現(xiàn)參數(shù)和返回值類型不符合。
- 作為開發(fā)文檔附加說明,方便使用者調(diào)用時傳入和返回參數(shù)類型。
- 該模塊加入后并不會影響程序的運行,不會報正式的錯誤,只有提醒
pycharm
目前支持typing
檢查,參數(shù)類型錯誤會黃色提示
3、常用類型
int
,long
,float
: 整型,長整形,浮點型;bool
,str:
布爾型,字符串類型;List
,Tuple
,Dict
,Set:
列表,元組,字典, 集合;Iterable
,Iterator:
可迭代類型,迭代器類型;Generator:
生成器類型;
除了以上常用的類型,還支持 Any
, Union
, Tuple
, Callable
, TypeVar
和 Generic
類型組成。有關(guān)完整的規(guī)范,請參閱 PEP 484 。有關(guān)類型提示的簡單介紹,請參閱 PEP 483
3.1 代碼示例
我們可以發(fā)現(xiàn),func
函數(shù)要求傳入的第2個參數(shù)為 str 類型,而我們調(diào)用時傳入的參數(shù)是 int
類型,此時Pycharm
就會用黃色來警告你,我們將光標(biāo)放到黃色的地方,會出現(xiàn)下面的提示
寫著期望類型是 str
,而現(xiàn)在是 int
,但是 typing
的作用僅僅是提示,并不會影響代碼執(zhí)行,我們執(zhí)行看看
執(zhí)行結(jié)果如下:
[2, 3]
我們會發(fā)現(xiàn)并沒有報錯,因為 typing
僅僅是起到了提醒的作用
4、typing模塊的其他用法
- 類型別名
NewType
Callable
TypeVar
泛型Any
類型Union
類型
4.1 類型別名
類型別名,就是給復(fù)雜的類型取個別名
# 給List[float]類型取個別名為Vector Vector = List[float] def scale(scalar: float, vector: Vector) -> Vector: return [scalar * num for num in vector] new_vector = scale(2.0, [1.0, -4.2, 5.4])
當(dāng)然,類型別名我們完全可以不用,用以下寫法也一樣,看個人喜好
def scale(scalar: float, vector: List[float]) -> List[float]: return [scalar * num for num in vector]
4.2 NewType
官網(wǎng)看了下,個人覺得這個沒啥用,就不細(xì)寫了
4.3 Callable
期望特定簽名的回調(diào)函數(shù)的框架可以將類型標(biāo)注為 Callable[[Arg1Type, Arg2Type], ReturnType]
。
[Arg1Type, Arg2Type]:
代表參數(shù)類型
ReturnType:
代表返回值類型
from typing import Callable def get_next_item(name: str): print(name) # Callable 作為函數(shù)參數(shù)使用,其實只是做一個類型檢查的作用,檢查傳入的參數(shù)值 get_next_item 是否為可調(diào)用對象 def feeder(get_next_item: Callable[[str], None]) -> (str): return get_next_item v1 = feeder(get_next_item) v1('hello') # 結(jié)果 hello
4.4 TypeVar泛型
可以自定義一個任意類型,也可以自定義指定類型
自定義一個任意類型
# 自定義一個任意類型 T = TypeVar('T') def func(user: T) -> T: print(user) return user func('1') func(1) func([1]) func((1, 2)) func({"status": 200}) # 結(jié)果 1 1 [1] (1, 2) {'status': 200}
自定義指定類型
# 指定為int或者str a = TypeVar('a', int, str) s1: a = 1 s2: a = 'aaa' s3: a = [] # 這里定義了列表,pycharm會出現(xiàn)黃色警告 print(s1, s2, s3) # 結(jié)果 1 aaa []
4.5 Any
Any
是一種特殊的類型。靜態(tài)類型檢查器認(rèn)為所有類型均與 Any 兼容,同樣, Any 也與所有類型兼容。
也就是說,可對 Any 類型的值執(zhí)行任何操作或方法調(diào)用,并賦值給任意變量:
from typing import Any a = None # type: Any a = [] # OK a = 2 # OK s = '' # type: str s = a # OK def foo(item: Any) -> int: # Typechecks; 'item' could be any type, # and that type might have a 'bar' method item.bar() ...
此外,未指定返回值與參數(shù)類型的函數(shù),都隱式地默認(rèn)使用 Any
:
def legacy_parser(text): ... return data # 兩種寫法效果是一樣的 def legacy_parser(text: Any) -> Any: ... return data
4.6 Union
Union類型語法格式: Union[X, Y]
,相當(dāng)于 X | Y ,意思是類型是X或者Y
如果我們想定義 Union 類型,就要寫成如下的eg: Union[X, Y]
,或者也可以使用縮寫X | Y(此寫法python3.10版本才支持)
from typing import Union # 指定變量a的類型為int或者str a: Union[int, str] a = 1 print(a) a = [] # 定義了一個列表,pycharm會有黃色警告提示
到此這篇關(guān)于python typing模塊--類型提示支持的文章就介紹到這了,更多相關(guān)python typing模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Python中zipfile壓縮包模塊的使用
這篇文章主要介紹了關(guān)于Python中zipfile壓縮包模塊的使用,zipfile?模塊提供了創(chuàng)建、讀取、寫入、添加及列出?ZIP?文件的工具,本文做一個簡單的總結(jié),需要的朋友可以參考下2023-04-04Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態(tài)HTML內(nèi)容
這篇文章主要介紹了Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態(tài)HTML內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02python實現(xiàn)不同數(shù)據(jù)庫間數(shù)據(jù)同步功能
這篇文章主要介紹了python實現(xiàn)不同數(shù)據(jù)庫間數(shù)據(jù)同步功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02Python中集合的創(chuàng)建及常用函數(shù)的使用詳解
這篇文章主要為大家詳細(xì)介紹了Python中集合的創(chuàng)建、使用和遍歷,集合常見的操作函數(shù),集合與列表,元組,字典的嵌套,感興趣的小伙伴可以了解一下2022-06-06