這7大神器颅悉,讓你的Python 代碼更易于維護(hù)

當(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ù)的重要步驟酵紫,因此,你不得不重視错维。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奖地,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赋焕,更是在濱河造成了極大的恐慌参歹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隆判,死亡現(xiàn)場(chǎng)離奇詭異犬庇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)侨嘀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門臭挽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咬腕,你說我怎么就攤上這事欢峰。” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵赤赊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我煞赢,道長(zhǎng)抛计,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任照筑,我火速辦了婚禮吹截,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凝危。我一直安慰自己波俄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布蛾默。 她就那樣靜靜地躺著懦铺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪支鸡。 梳的紋絲不亂的頭發(fā)上冬念,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音牧挣,去河邊找鬼急前。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瀑构,可吹牛的內(nèi)容都是我干的裆针。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寺晌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼世吨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起折剃,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤另假,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后怕犁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體边篮,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年奏甫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戈轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阵子,死狀恐怖思杯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤色乾,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布誊册,位于F島的核電站,受9級(jí)特大地震影響暖璧,放射性物質(zhì)發(fā)生泄漏案怯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一澎办、第九天 我趴在偏房一處隱蔽的房頂上張望嘲碱。 院中可真熱鬧,春花似錦局蚀、人聲如沸麦锯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扶欣。三九已至,卻和暖如春千扶,著一層夾襖步出監(jiān)牢的瞬間宵蛀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工县貌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留术陶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓煤痕,卻偏偏與公主長(zhǎng)得像梧宫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摆碉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容