當(dāng)軟件項(xiàng)目進(jìn) 入“維護(hù)模式”時(shí)跨跨,對(duì)代碼的可讀性和編碼標(biāo)準(zhǔn)經(jīng)常就忽略了(甚至從一開始就沒有建立起這些標(biāo)準(zhǔn)潮峦。)但是,在代碼庫(kù)中保持一致的風(fēng)格和測(cè)試標(biāo)準(zhǔn)是減少維護(hù)負(fù)擔(dān)的重要因素勇婴,它能確保未來的開發(fā)人員能夠快速了解新的項(xiàng)目情況 - 并保持項(xiàng)目的良好運(yùn)行
? ? ? ?保護(hù)項(xiàng)目未來可維護(hù)性的一個(gè)好方法就是使用外部庫(kù)來檢查你的代碼運(yùn)行狀況忱嘹。以下是我們最喜歡的一些用于檢查代碼的庫(kù)(包含檢查PEP 8和其他樣式錯(cuò)誤),讓代碼風(fēng)格保持一致耕渴,并確保在項(xiàng)目成熟時(shí)的測(cè)試覆蓋率保持在可接受范圍拘悦。
檢查你的代碼風(fēng)格
PEP 8是Python代碼風(fēng)格規(guī)范,它對(duì)行長(zhǎng)度橱脸,縮進(jìn)础米,多行表達(dá)式和命名約定等內(nèi)容有明確的規(guī)范。你的團(tuán)隊(duì)可能也有自己的代碼規(guī)則添诉,可能與PEP 8略有不同屁桑。但是,任何代碼風(fēng)格都是為了在代碼庫(kù)中強(qiáng)制實(shí)施一致的標(biāo)準(zhǔn)吻商,使其更具可讀性掏颊,從而更易于維護(hù)。這里有三個(gè)庫(kù)來幫助美化你的代碼艾帐。
1乌叶、 Pylint
Pylint 是一個(gè) Python 代碼分析工具,它分析 Python 代碼中的錯(cuò)誤柒爸,查找不符合代碼風(fēng)格標(biāo)準(zhǔn)(Pylint 默認(rèn)使用的代碼風(fēng)格是 PEP 8)和有潛在問題的代碼准浴。 。它與幾個(gè)流行的編輯器和IDE很好地集成捎稚,也可以從命令行運(yùn)行乐横。
要安裝求橄,請(qǐng)運(yùn)行?pip install pylint?。
要從命令行運(yùn)行 Pylint葡公,請(qǐng)運(yùn)行?pylint [options] path/to/dir?或?pylint [options] path/to/module.py?罐农。Pylint 會(huì)向控制臺(tái)輸出不符合代碼風(fēng)格標(biāo)準(zhǔn)以及錯(cuò)誤代碼的地方
你還可以調(diào)用 pylintrc 配置文件來自定義 Pylint 檢查的錯(cuò)誤。(項(xiàng)目地址:?https://www.pylint.org/?)
2催什、Flake8
Flake8是一個(gè)“Python工具涵亏,它將PEP8,Pyflakes(類似于Pylint)蒲凶,McCabe(代碼復(fù)雜性檢查器)和第三方插件集合在一起气筋,以檢查某些Python代碼的風(fēng)格和質(zhì)量⌒玻”
要使用Flake8宠默,要先運(yùn)行?pip install flake8?。然后運(yùn)行?flake8 [options] path/to/dir?或?flake8 [options] path/to/module.py?查看其錯(cuò)誤和警告灵巧。
與Pylint一樣搀矫,F(xiàn)lake8允許對(duì)配置文件檢查的內(nèi)容進(jìn)行一些自定義。它有非常清晰的文檔孩等,包括一些有用的Commit艾君,可以作為開發(fā)工作流程的一部分自動(dòng)檢查代碼。
Flake8能夠與流行的編輯器和IDE集成肄方,但這些指令通常在文檔中并沒有說明。要將Flake8與你喜歡的編輯器或IDE集成蹬癌,可以在線搜索插件(例如 Sublime Text的Flake8插件)权她。(項(xiàng)目地址:?http://flake8.pycqa.org/en/latest/?)
3、Isort
isort 可自動(dòng)對(duì) Python的 import語句進(jìn)行排序和分段逝薪∮缫可將大量的 import結(jié)構(gòu)轉(zhuǎn)成非常適合閱讀的排版。(例如董济,標(biāo)準(zhǔn)庫(kù)導(dǎo)入步清,第三方庫(kù)導(dǎo)入,從你自己的項(xiàng)目導(dǎo)入等)虏肾,這樣可以提高可讀性廓啊,而且如果你導(dǎo)入的庫(kù)較多,還能快速找到各個(gè)庫(kù)
安裝?isort pip install isort?封豪,然后運(yùn)行?isort path/to/module.py?谴轮。文檔中提供了許多配置選項(xiàng)。例如吹埠,你可以配置 isort如何處理.isort.cfg文件來執(zhí)行一個(gè)庫(kù)的多行導(dǎo)入第步。
與Flake8和Pylint一樣疮装,isort還提供了將其與流行的編輯器和IDE集成的插件。(項(xiàng)目地址:?https://github.com/timothycrosley/isort?)
分享你的代碼風(fēng)格
記住從命令行手動(dòng)為每個(gè)文件運(yùn)行l(wèi)inters是一件很痛苦的事情粘都,你可能也不太喜歡通過運(yùn)行 IDE 中某個(gè)插件來實(shí)現(xiàn)這個(gè)功能廓推。另外,您的同事可能更喜歡別的方式翩隧,或者可能他們最喜歡的編輯器的沒有這個(gè)插件樊展,或者你檢查代碼不夠細(xì)致,久而久之鸽心,你們共享的代碼庫(kù)將變得混亂并且難以閱讀滚局。
一個(gè)很好的解決方案是使用一個(gè)庫(kù),自動(dòng)將代碼重新按照PEP 8規(guī)范進(jìn)行格式化顽频。我們推薦的三個(gè)庫(kù)都有不同的自定義級(jí)別來控制如何格式化代碼藤肢,像pylint的和Flake8,你要先測(cè)試糯景,看看它是否存在你接受不了卻無法更改的默認(rèn)配置嘁圈。?
4、 Autopep8
Autopep8可以自動(dòng)格式化你指定的模塊中的代碼蟀淮。它將重新縮進(jìn)行最住,修復(fù)縮進(jìn),刪除無關(guān)的空白怠惶,并重構(gòu)常見的比較錯(cuò)誤(如布爾和None值)涨缚。你可以在它的文檔中查看完整的更改列表
安裝Autopep8,需要先運(yùn)行?pip install --upgrade autopep8?策治。要重新格式化代碼脓魏,請(qǐng)運(yùn)行?pip install --upgrade autopep8??。然后執(zhí)行autopep8 --in-place --aggressive --aggressive ?就可以重新格式化你的代碼通惫。該aggressive標(biāo)志(和它們的數(shù)量)茂翔,表明autopep8對(duì)你的代碼風(fēng)格有多少控制權(quán)。(項(xiàng)目地址:?https://github.com/hhatto/autopep8?)
5履腋、 Yapf
Yapf是重新格式化代碼的另一種選擇珊燎,它帶有自己的配置選項(xiàng)列表。它與autopep8的不同之處在于它不僅僅解決了違反PEP 8規(guī)范的問題遵湖。它還重新格式化了沒有違反PEP 8規(guī)范的代碼悔政,但沒有一致地設(shè)置樣式,可能是為了可讀性而格式化得更好奄侠。
要安裝Yapf卓箫,需要運(yùn)行?pip install yapf?。要重新格式化代碼垄潮,要運(yùn)行?yapf [options] path/to/dir?或?yapf [options] path/to/module.py?烹卒。(項(xiàng)目地址:?https://github.com/google/yapf?)
6闷盔、 Black
在所有的代碼檢查工具中,Black算是比較新的一個(gè)旅急。它與autopep8和Yapf類似逢勾,但限制比較多,它很少有自定義選項(xiàng)藐吮,這是重點(diǎn)溺拱,這意味著你無法自定義代碼風(fēng)格。
Black支持Python 3.6+以上的版本谣辞,但可以
格式化Python 2代碼迫摔。要使用Black,請(qǐng)運(yùn)行?pip install black?泥从。要美化您的代碼句占,請(qǐng)運(yùn)行:?black path/to/dir或black path/to/module.py?。(項(xiàng)目地址:?https://github.com/ambv/black?)
檢查代碼的測(cè)試覆蓋率
假如你正在編寫測(cè)試躯嫉,你需要確保對(duì)代碼庫(kù)提交的新代碼進(jìn)行測(cè)試纱烘,并且不會(huì)降低代碼的測(cè)試覆蓋率。雖然測(cè)試覆蓋率的百分比不是衡量測(cè)試有效性和充分性的唯一指標(biāo)祈餐,但它是確保項(xiàng)目中遵循基本測(cè)試標(biāo)準(zhǔn)的一種方法擂啥。為了測(cè)量測(cè)試覆蓋率,我們有一個(gè)建議:使用 Coverage 這個(gè)庫(kù)帆阳。
7哺壶、Coverage
Coverage有多種向你報(bào)告測(cè)試覆蓋率的方式,包括將結(jié)果輸出到控制臺(tái)或HTML頁(yè)面蜒谤,并提示哪些行號(hào)沒有覆蓋到变骡。你可以設(shè)置配置文件以自定義Coverage檢查的內(nèi)容并使其更便于運(yùn)行。
要安裝Coverage芭逝,請(qǐng)運(yùn)行?pip install coverage?。要運(yùn)行程序并查看其輸出渊胸,請(qǐng)運(yùn)行?coverage run [path/to/module.py] [args]?旬盯,接著你將看到程序的輸出。要查看哪些代碼行沒有被覆蓋翎猛,請(qǐng)運(yùn)行?coverage report -m?胖翰。(項(xiàng)目地址:https://coverage.readthedocs.io/en/latest/?)
持續(xù)集成工具
持續(xù)集成(CI)是在合并和部署代碼之前,自動(dòng)檢查代碼風(fēng)格錯(cuò)誤和測(cè)試最小覆蓋率的一系列過程切厘。有許多免費(fèi)或付費(fèi)的工具可以自動(dòng)化這個(gè)過程萨咳,本文這里就不詳細(xì)介紹了。但是疫稿,由于設(shè)置CI過程是將代碼塊刪除為更易于閱讀和維護(hù)的重要步驟培他,因此鹃两,你不得不重視。
————————————————————————————————————?
想了解更多前沿技術(shù)舀凛,想獲取最新免費(fèi)編程資源視頻源碼筆記俊扳,小伙伴請(qǐng)往下看!
qun號(hào)是:八六四猛遍,六三四馋记,八四五。qun內(nèi)有很多開發(fā)工具懊烤,很多干貨和技術(shù)資料分享梯醒!
如果您覺得此篇文章對(duì)您有幫助,歡迎關(guān)注微信公眾號(hào):大禹編程腌紧,您的支持是對(duì)我最大的鼓勵(lì)茸习!共同學(xué)習(xí),共同進(jìn)步:?