Python靜態(tài)類(lèi)型檢查新工具之pyright 使用指南
Python是一門(mén)動(dòng)態(tài)類(lèi)型的語(yǔ)言,民間流傳一種說(shuō)法叫”動(dòng)態(tài)一時(shí)爽,重構(gòu)火葬場(chǎng)”,聽(tīng)起來(lái)夠嚇人的,好在這門(mén)語(yǔ)言在不斷地改進(jìn),包括對(duì) PEP484 引入的類(lèi)型提示(Type Hint),就是在某種程度上,讓Python能夠像靜態(tài)語(yǔ)言一樣支持類(lèi)型聲明,例如:
def greeting(name: str) -> str: return 'Hello ' + name
這就意味著,如果有人調(diào)用 greeting函數(shù)的時(shí)候,傳入的參數(shù)不是字符串,你用靜態(tài)類(lèi)型檢查工具一下就能查出來(lái)哪些地方?jīng)]有傳入正確類(lèi)型的值。而 pyright 就是為此而生。
pyright 核心特性:
- TypeScript 編寫(xiě),速度快
- 不依賴Python環(huán)境
- 可配置性強(qiáng)
我們可以直接在 vscode 搜索安裝插件 pyright

命令行工具可以使用 npm 安裝
sudo npm i -g pyright
如何使用pyright
假設(shè)有個(gè)python文件 hello.py,里面代碼是:
def greeting2(age:int) -> str:
print("hello")
greeting2("nihao")
greeting2(1)
注意我給greeting2中的參數(shù)類(lèi)型聲明是int,返回的返回值是字符串類(lèi)型,但是在函數(shù)中并沒(méi)有看到return 返回值。直接運(yùn)行該文件不會(huì)有任何錯(cuò)誤
python hello.py hello hello
在VSCode中會(huì)直接有錯(cuò)誤提示信息:

如果我們用 pyright 檢查代碼,輸出信息:
pyright hello.py
Finding source files
Found 1 source files
Analyzed 1 file in 1.546sec
/Users/xxxx/Workspace/My/draft/hello.py
Function with declared type of str must return value (1, 28)
Argument of type 'str' cannot be assigned to parameter of type 'int' (4, 11)
2 errors, 0 warnings
Find Source Files: 0.001sec
Read Source Files: 0.012sec
Tokenize: 0.085sec
Parse: 0.17sec
Post-parse Walker: 0.147sec
Semantic Analyzer: 0.293sec
Type Analyzer: 0.766sec
提示有兩處問(wèn)題:
- Function with declared type of str must return value (1, 28),函數(shù)聲明返回str類(lèi)型的值,但是卻沒(méi)有返回
- Argument of type 'str' cannot be assigned to parameter of type 'int' (4, 11), 字符串值不能復(fù)制給int類(lèi)型參數(shù)
剩下的事情就是按照錯(cuò)誤提示修正, 正如 PEP484 所說(shuō)的那樣,Type Hint is not role , is tool。 它并不是規(guī)則,只是一個(gè)工具,幫助我們規(guī)避某些錯(cuò)誤。即使你傳錯(cuò)了參數(shù),程序編譯時(shí)并不會(huì)報(bào)錯(cuò),只有執(zhí)行到具體的業(yè)務(wù)代碼的時(shí)候才會(huì)出錯(cuò)。
GitHub地址:https://github.com/Microsoft/pyright
總結(jié)
以上所述是小編給大家介紹的Python靜態(tài)類(lèi)型檢查新工具之pyright 使用指南,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Python深度學(xué)習(xí)之FastText實(shí)現(xiàn)文本分類(lèi)詳解
FastText是一種典型的深度學(xué)習(xí)詞向量的表示方法,它非常簡(jiǎn)單通過(guò)Embedding層將單詞映射到稠密空間,然后將句子中所有的單詞在Embedding空間中進(jìn)行平均,進(jìn)而完成分類(lèi)操作2022-09-09
python 利用棧和隊(duì)列模擬遞歸的過(guò)程
這篇文章主要介紹了python 利用棧和隊(duì)列模擬遞歸的過(guò)程,文中并通過(guò)兩段代碼給大家介紹了下遞歸和非遞歸的區(qū)別,需要的朋友可以參考下2018-05-05
python定時(shí)檢測(cè)無(wú)響應(yīng)進(jìn)程并重啟的實(shí)例代碼
這篇文章主要介紹了python定時(shí)檢測(cè)無(wú)響應(yīng)進(jìn)程并重啟的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Python實(shí)現(xiàn)七大查找算法的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)七大查找算法的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
python3編寫(xiě)ThinkPHP命令執(zhí)行Getshell的方法
這篇文章主要介紹了python3編寫(xiě)ThinkPHP命令執(zhí)行Getshell的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
pandas 實(shí)現(xiàn)將NaN轉(zhuǎn)換為None
這篇文章主要介紹了pandas 實(shí)現(xiàn)將NaN轉(zhuǎn)換為None的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
利用Tensorboard繪制網(wǎng)絡(luò)識(shí)別準(zhǔn)確率和loss曲線實(shí)例
今天小編就為大家分享一篇利用Tensorboard繪制網(wǎng)絡(luò)識(shí)別準(zhǔn)確率和loss曲線實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python中requests庫(kù)+xpath+lxml簡(jiǎn)單使用
這篇文章主要介紹了python中requests庫(kù)+xpath+lxml簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

