當(dāng)軟件項(xiàng)目進(jìn)入“維護(hù)模式”時(shí)沽瞭,對(duì)代碼的可讀性和編碼標(biāo)準(zhǔn)經(jīng)常就忽略了(甚至從一開始就沒有建立起這些標(biāo)準(zhǔn)。)但是剩瓶,在代碼庫中保持一致的風(fēng)格和測(cè)試標(biāo)準(zhǔn)是減少維護(hù)負(fù)擔(dān)的重要因素驹溃,它能確保未來的開發(fā)人員能夠快速了解新的項(xiàng)目情況 - 并保持項(xiàng)目的良好運(yùn)行
小編推薦大家可以加我的扣扣群 735934841 。里面有海量視頻教程和學(xué)習(xí)資料免費(fèi)領(lǐng)取延曙,不失為是一個(gè)學(xué)習(xí)的好地方豌鹤,歡迎你的到來。一起交流學(xué)習(xí)枝缔!共同進(jìn)步2几怼蚊惯!
保護(hù)項(xiàng)目未來可維護(hù)性的一個(gè)好方法就是使用外部庫來檢查你的代碼運(yùn)行狀況。以下是我們最喜歡的一些用于檢查代碼的庫(包含檢查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)格都是為了在代碼庫中強(qiáng)制實(shí)施一致的標(biāo)準(zhǔn)精堕,使其更具可讀性,從而更易于維護(hù)锌唾。這里有三個(gè)庫來幫助美化你的代碼锄码。
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)庫導(dǎo)入忠烛,第三方庫導(dǎo)入,從你自己的項(xiàng)目導(dǎo)入等)权逗,這樣可以提高可讀性美尸,而且如果你導(dǎo)入的庫較多,還能快速找到各個(gè)庫
安裝 isort pip install isort斟薇,然后運(yùn)行 isort path/to/module.py师坎。文檔中提供了許多配置選項(xiàng)。例如堪滨,你可以配置 isort如何處理.isort.cfg文件來執(zhí)行一個(gè)庫的多行導(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ì)致了讨,久而久之捻激,你們共享的代碼庫將變得混亂并且難以閱讀。
一個(gè)很好的解決方案是使用一個(gè)庫量蕊,自動(dòng)將代碼重新按照PEP 8規(guī)范進(jìn)行格式化。我們推薦的三個(gè)庫都有不同的自定義級(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 <filename> 就可以重新格式化你的代碼畴蹭。該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ì)代碼庫提交的新代碼進(jìn)行測(cè)試艾蓝,并且不會(huì)降低代碼的測(cè)試覆蓋率力崇。雖然測(cè)試覆蓋率的百分比不是衡量測(cè)試有效性和充分性的唯一指標(biāo)斗塘,但它是確保項(xiàng)目中遵循基本測(cè)試標(biāo)準(zhǔn)的一種方法。為了測(cè)量測(cè)試覆蓋率亮靴,我們有一個(gè)建議:使用 Coverage 這個(gè)庫馍盟。
7、Coverage
Coverage有多種向你報(bào)告測(cè)試覆蓋率的方式茧吊,包括將結(jié)果輸出到控制臺(tái)或HTML頁面贞岭,并提示哪些行號(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ù)的重要步驟酵紫,因此,你不得不重視错维。