當(dāng)你想要爭論代碼復(fù)雜性時,Pylint是你的朋友。
Pylint是更高層級的Python樣式強制程序。而flake8和black檢查的是“本地”樣式:換行位置、注釋的格式、發(fā)現(xiàn)注釋掉的代碼或日志格式中的錯誤做法之類的問題。
默認(rèn)情況下,Pylint非常激進。它將對每樣?xùn)|西都提供嚴(yán)厲的意見,從檢查是否實際實現(xiàn)聲明的接口到重構(gòu)重復(fù)代碼的可能性,這對新用戶來說可能會很多。一種溫和地將其引入項目或團隊的方法是先關(guān)閉所有檢查器,然后逐個啟用檢查器。如果你已經(jīng)在使用flake8、black和mypy,這尤其有用:Pylint有相當(dāng)多的檢查器和它們在功能上重疊。
但是,Pylint獨有之處之一是能夠強制執(zhí)行更高級別的問題:例如,函數(shù)的行數(shù)或者類中方法的數(shù)量。
這些數(shù)字可能因項目而異,并且可能取決于開發(fā)團隊的偏好。但是,一旦團隊就參數(shù)達(dá)成一致,使用自動工具強制化這些參數(shù)非常有用。這是Pylint閃耀的地方。
配置Pylint
要以空配置開始,請將.pylintrc設(shè)置為
[MESSAGESCONTROL]
disable=all
[MESSAGESCONTROL]
disable=all
這將禁用所有Pylint消息。由于其中許多是冗余的,這是有道理的。在Pylint中,message是一種特定的警告。
你可以通過運行pylint來確認(rèn)所有消息都已關(guān)閉:
$pylint
通常,向pylint命令行添加參數(shù)并不是一個好主意:配置pylint的位置是.pylintrc。為了使它做一些有用的事,我們需要啟用一些消息。
要啟用消息,在.pylintrc中的[MESSAGESCONTROL]下添加
enable=,
...
對于看起來有用的“消息”(Pylint稱之為不同類型的警告)。我最喜歡的包括too-many-lines、too-many-arguments和too-many-branches。所有這些會限制模塊或函數(shù)的復(fù)雜性,并且無需進行人工操作即可客觀地進行代碼復(fù)雜度測量。
檢查器是消息的來源:每條消息只屬于一個檢查器。許多最有用的消息都在設(shè)計檢查器下。默認(rèn)數(shù)字通常都不錯,但要調(diào)整最大值也很簡單:我們可以在.pylintrc中添加一個名為DESIGN的段。
[DESIGN]
max-args=7
max-locals=15
另一個有用的消息來源是“重構(gòu)”檢查器。我已啟用一些最喜歡的消息有consider-using-dict-comprehension、stop-iteration-return(它會查找正確的停止迭代的方式是return而使用了raiseStopIteration的迭代器)和chained-comparison,它將建議使用如1<=x<5,而不是不太明顯的1<=x&&5>5的語法。
最后是一個在性能方面消耗很大的檢查器,但它非常有用,就是similarities。它會查找不同部分代碼之間的復(fù)制粘貼來強制執(zhí)行“不要重復(fù)自己”(DRY原則)。它只啟用一條消息:duplicate-code。默認(rèn)的“最小相似行數(shù)”設(shè)置為4。可以使用.pylintrc將其設(shè)置為不同的值。
[SIMILARITIES]
min-similarity-lines=3
Pylint使代碼評審變得簡單
如果你厭倦了需要指出一個類太復(fù)雜,或者兩個不同的函數(shù)基本相同的代碼評審,請將Pylint添加到你的持續(xù)集成配置中,并且只需要對項目復(fù)雜性準(zhǔn)則的爭論一次就行。
以上內(nèi)容為大家介紹了Pylint讓Python代碼保持一致,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。http://m.2667701.com/