當(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)步!!
保護(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ì)行長度,縮進(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ù)的重要步驟,因此,你不得不重視。