怎么才能寫出好看的Python代碼?這五個工具你得用上
昨天花時間選讀了朱雷老師新出版的《Python工匠》的第十三章,簡單和大家分享下,總結(jié)分享分為兩篇,本篇主要介紹如何寫出好看的代碼,給大家分享我從書里學(xué)到的五個代碼風(fēng)格優(yōu)化工具。
圖書由圖靈教育提供,感謝圖靈教育支持。這周四也給大家安排了贈書活動,3.7開獎,送五本《Python工匠》,歡迎大家去參與呀~一定要注意文末參與規(guī)則,點(diǎn)擊參與贈書活動。
1、簡單聊聊
首先得給大家說說我為什么直接從第十三章開始讀,簡單說就是我對這一章更感興趣,當(dāng)然本書其他章節(jié)也是非常優(yōu)秀的,后面我也會抽時間閱讀學(xué)習(xí)。
另外需要和大家說的是,如本書作者在前言中說的,這并不是一本Python入門學(xué)習(xí)的書,雖然本書中目錄涉及到了Python基礎(chǔ)知識的方方面面,如:變量與注釋、數(shù)值與字符串、列表字典集合等,書中主要給大家介紹了這些知識點(diǎn)的一些應(yīng)用,大多是作者自己十余年開發(fā)經(jīng)驗(yàn)的總結(jié)。
我想,通過本書學(xué)習(xí),應(yīng)該是可以讓你學(xué)到很多自己之前不曾注意到的代碼編寫技巧和方法,更加精進(jìn)你的代碼和代碼編寫方式的,如:代碼格式化技巧。
所以本書比較適合有一定Python基礎(chǔ)的同學(xué),用我的話來說就是:你應(yīng)該至少看過小甲魚的Python入門課。(只是舉例,并不是指入門就一定得是看小甲魚,但是我一直很推薦)或者如作者在書中的推薦,你可以學(xué)習(xí)圖靈教育出版的另外一本書《Python編程:從入門到實(shí)踐》。
好啦,關(guān)于圖書相關(guān)介紹就到這里啦,有什么其他問題或者疑問的話,歡迎大家留言交流。
接下來給大家分享自己的讀書筆記。如該章名字:開發(fā)大型項(xiàng)目,主要給大家介紹分享了一些作者自己在開發(fā)大型項(xiàng)目過程中總結(jié)下來的經(jīng)驗(yàn)和技巧,可以分為兩部分:代碼風(fēng)格相關(guān)和單元測試相關(guān)。
2、代碼風(fēng)格相關(guān)工具
這里的工具并非什么軟件,而是基于Python的標(biāo)準(zhǔn)庫/第三方庫。
代碼風(fēng)格相關(guān)的,作者一共分享了5個庫,flake8、isort、black、pre-commit和mypy,都可以直接通過pip install的方式進(jìn)行安裝,如果你想一次安裝所有,只需像下面這樣即可。
pip?install?flake8、isort、black、pre-commit?mypy
2.1 flake8
flake8 集合了PyFlakes、pycodestyle、McCabe,它們的功能依次是檢測代碼語法錯誤和變量名未定義或者使用等、代碼格式是否符合PEP8規(guī)范、代碼中函數(shù)的圈復(fù)雜度。
McCabe檢測的圈復(fù)雜度你可能不知道表示什么,簡單說就是代碼難不難理解(它是根據(jù)函數(shù)的控制流程圖來計(jì)算的,具體介紹大家感興趣可以瀏覽器查查)。
2.2 isort
isort 用于按字母順序?qū)Υa中的import進(jìn)行排序,并自動按導(dǎo)入包的類型進(jìn)行分隔,一般包類型分為:
標(biāo)準(zhǔn)庫包(python自帶的) 第三方包(需要pip install安裝的) 本地包(自己本地寫的)

這個我覺得挺有用的,特別是一些代碼量較多的項(xiàng)目里,通常會有很多導(dǎo)入,甚至?xí)兄貜?fù)導(dǎo)入,通過isort我們可以很清楚的看到導(dǎo)入了哪些包和它們之間的關(guān)系。
2.3 black
"Black is the uncompromising Python code formatter. " @github.com/psf/black
如官方介紹,black是一個不妥協(xié)的Python代碼格式化工具,它有自己的格式化風(fēng)格(當(dāng)然都是滿足PEP8規(guī)范的),幾乎沒有可以自定義的配置,這樣的好處是你不用過分的去糾結(jié)用什么編碼風(fēng)格(很多時候同樣的代碼 滿足PEP8規(guī)范的寫法也有很多種方式)。
2.4 pre-commit
這幾個包里,我最喜歡的是pre-commit,通過在github倉庫項(xiàng)目根目錄設(shè)置個配置文件.pre-commit-config.yaml就能自動在提交代碼(git commit)前先自動執(zhí)行配置文件中配置的腳本,比如前面說的代碼格式規(guī)范,如果發(fā)現(xiàn)問題就會終止提交,并輸出問題。
.pre-commit-config.yaml一般結(jié)構(gòu):
repos:
-???repo:?https://github.com/pre-commit/pre-commit-hooks
????rev:?v2.3.0
????hooks:
????-???id:?check-yaml
????-???id:?end-of-file-fixer
????-???id:?trailing-whitespace
-???repo:?https://github.com/psf/black
????rev:?21.12b0
????hooks:
????-???id:?black

更多配置介紹可以查看@pre-commit.com/#pre-commit-configyaml---hooks
2.5 mypy
mypy是一個靜態(tài)類型檢查工具,會根據(jù)代碼中的類型注解對代碼進(jìn)行類型檢查并查找常見錯誤。也是一個非常實(shí)用的包。
其實(shí)我自己平時寫Python代碼是很少寫類型注解的,不過作者說的“雖然相比于傳統(tǒng)Python代碼,編寫類型注解的代碼總是更麻煩一些,需要進(jìn)行額外的工作,但和類型注解所帶來的諸多好處相比是完全值得的”,這個我是非常認(rèn)同的。
而且類型注解,對于大型項(xiàng)目來說更是重要,完善的類型注解可以讓伙伴更好地閱讀理解代碼,也更方便代碼的重構(gòu)或者修改。
3、單元測試相關(guān)
上面的代碼風(fēng)格相關(guān)工具部分,不管什么領(lǐng)域、應(yīng)用場景下,基本都有用,接下來分享的單元測試,可能就更偏向于開發(fā)、測試相關(guān)領(lǐng)域了,我們下回分享。
這里也歡迎大家留言分享下自己平時用的比較多的Python標(biāo)準(zhǔn)庫或者第三方庫~分享使自己進(jìn)步,互相分享使社會進(jìn)步。
那么下期見,我是愛貓愛技術(shù),更愛思思的老表???( ˙?˙ )???
近期閱讀學(xué)習(xí)推薦:
Python超好用的命令行界面實(shí)現(xiàn)工具
Python自動化處理Excel表格實(shí)戰(zhàn)完整代碼分享(課表解析)
如何找到我:

