使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索
前言
Python的typing模塊提供了用于類型注解的功能。通過(guò)使用typing模塊,你可以在代碼中添加類型注釋,以提高代碼的可讀性和可維護(hù)性,并且可以使用類型檢查來(lái)驗(yàn)證代碼中的類型是否符合預(yù)期。
一.基本用法
1.基本類型提示
from typing import List, Tuple, Dict, Set def add(a: int, b: int) -> int: # 定義輸入的變量為int 類型,返回值也是int return a + b def get_name_age() -> Tuple[str, int]:# 定義返回類型為元組并且,第一個(gè)元素str,第二個(gè)是int return "王五", 18 def get_students() -> List[str]:# 定義返回類型為list,所有元素為str return ["小黑", "小華", "小米"] def get_scores() -> Dict[str, int]:# 定義返回為字典,key是str,value是int return {"python": 100, "java": 80, "go": 80} def get_unique_numbers() -> Set[int]:# 定義返回是集合,并且里面的元素為int return {1, 2, 3, 4, 5,6}
2.泛型類型提示
from typing import TypeVar, Generic T = TypeVar("T") class Stack(Generic[T]): def push(self, item: T) -> None: pass def pop(self) -> T: pass def is_empty(self) -> bool: pass
3.類方法、靜態(tài)方法和實(shí)例方法的類型提示
from typing import ClassVar, Optional class MyClass: my_var: ClassVar[int] = 0 def __init__(self, value: int) -> None: self.value = value def instance_method(self, x: int) -> int: return self.value * x @classmethod def class_method(cls, y: int) -> int: return cls.my_var + y @staticmethod def static_method(z: int) -> int: return z * 2
4.Union類型提示
from typing import Union def func(x: Union[int, float]) -> None: pass
5.Any類型提示
from typing import Any def func(x: Any) -> None: pass
6.Callable類型提示
from typing import Callable def func(x: Callable[[int], int]) -> None: pass
7.定義變量類型
from typing import Optional name: str = "張三" age: int = 18 address: Optional[str] = None # 字符類型,或者None
二.使用場(chǎng)景
類型檢查:
typing
模塊可以用于進(jìn)行類型檢查,防止運(yùn)行時(shí)出現(xiàn)參數(shù)和返回值類型不符合的情況。這對(duì)于提高代碼的健壯性和可維護(hù)性非常有幫助。文檔附加說(shuō)明:通過(guò)使用
typing
模塊中的類型注解,可以在代碼中為變量、函數(shù)參數(shù)和返回值添加類型信息,方便使用者了解函數(shù)的期望輸入和輸出。這可以提高代碼的可讀性和可維護(hù)性。IDE提示:一些集成開(kāi)發(fā)環(huán)境(IDE)可以利用
typing
模塊中的類型注解提供更精準(zhǔn)的代碼提示,從而提高開(kāi)發(fā)效率。類型轉(zhuǎn)換:雖然
typing
模塊主要用于類型注解和檢查,但也可以用于類型轉(zhuǎn)換。例如,可以使用cast()
函數(shù)將一個(gè)對(duì)象強(qiáng)制轉(zhuǎn)換為指定的類型。自定義類型注解:
typing
模塊還支持自定義類型注解,可以用來(lái)定義自己的數(shù)據(jù)類型或泛型。這對(duì)于創(chuàng)建可重用的組件和庫(kù)非常有用。與其他類型的比較:在比較兩個(gè)不同類型的數(shù)據(jù)時(shí),可以使用
issubclass()
和isinstance()
函數(shù)來(lái)判斷一個(gè)類是否是另一個(gè)類的子類或一個(gè)對(duì)象是否是某個(gè)類的實(shí)例。
三.注意事項(xiàng)
向后兼容性:雖然
typing
模塊已經(jīng)正式加入到了標(biāo)準(zhǔn)庫(kù)中,但是如果核心開(kāi)發(fā)者認(rèn)為有必要的話,API也可能會(huì)發(fā)生改變,即不保證向后兼容性。類型別名:可以通過(guò)給類型賦予別名來(lái)簡(jiǎn)化類型注釋,例如使用
Vector = List[float]
來(lái)創(chuàng)建一個(gè)類型別名。需要注意的是,簡(jiǎn)單的類型注解如默認(rèn)的int
、str
等除外。泛型:可以使用泛型類來(lái)定義可以接受不同類型參數(shù)的類。需要注意的是,泛型類不能直接實(shí)例化,需要使用繼承泛型類的方式創(chuàng)建具體類。
類型變量:可以使用
TypeVar
來(lái)定義類型變量,用于約束泛型類型參數(shù)的類型。需要注意的是,TypeVar
不是一個(gè)類,使用isinstance(x, T)
會(huì)在運(yùn)行時(shí)拋出TypeError
異常。使用場(chǎng)景:雖然
typing
模塊提供了一些強(qiáng)大的類型注解和檢查功能,但這些功能并不會(huì)在運(yùn)行時(shí)強(qiáng)制執(zhí)行類型檢查。因此,在某些情況下,即使代碼中添加了類型注解,也可能仍然會(huì)出現(xiàn)類型錯(cuò)誤。IDE支持:雖然許多IDE支持
typing
模塊中的類型注解和檢查功能,但不同IDE的支持程度可能會(huì)有所不同。因此,在使用IDE進(jìn)行代碼開(kāi)發(fā)和調(diào)試時(shí),需要注意IDE對(duì)typing
模塊的支持情況
以上就是使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索的詳細(xì)內(nèi)容,更多關(guān)于Python Typing模塊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python3搭建http服務(wù)器的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python3搭建http服務(wù)器的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn)
在Web開(kāi)發(fā)和報(bào)告任務(wù)中,將HTML內(nèi)容轉(zhuǎn)換為PDF是一種常見(jiàn)需求,本文主要介紹了Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Python通過(guò)cv2讀取多個(gè)USB攝像頭
這篇文章主要為大家詳細(xì)介紹了Python通過(guò)cv2讀取多個(gè)USB攝像頭,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例
今天小編就為大家分享一篇pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08python中Requests發(fā)送json格式的post請(qǐng)求方法
這篇文章主要介紹了python中Requests發(fā)送json格式的post請(qǐng)求方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2022-09-09Springboo如何t動(dòng)態(tài)修改配置文件屬性
這篇文章主要介紹了Springboo如何t動(dòng)態(tài)修改配置文件屬性問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python OpenCV實(shí)現(xiàn)視頻追蹤
這篇文章主要為大家詳細(xì)介紹了Python OpenCV實(shí)現(xiàn)視頻追蹤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08