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

當(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)步:?

?著作權(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)容

  • 第三十七天 睡了一天曹货。睡了快20小時(shí)了咆繁。 你沒錢了。放心顶籽,真到彈盡糧絕的時(shí)候玩般,還有我呢。 你又跟我耍賴蜕衡。是你提出要...
    漫步的野馬閱讀 130評(píng)論 0 0
  • 行過如歌歲月 踏過似水流年 度過滄海桑田 有一些人卻注定漸行漸遠(yuǎn) 但壤短, 即使再不舍 也只能用淚水作為留言 畢竟,都...
    林楚辭閱讀 235評(píng)論 2 1
  • 安徒生曾經(jīng)說過:他的童話并不是只給兒童看的,兒童看的只是外表镰吆,而內(nèi)核是寫給成年人的帘撰。 漢斯·克里斯蒂安·安徒生(1...
    娟姐的心語話廊閱讀 445評(píng)論 0 3