在 Python/ target=_blank class=infotextkey>Python 項(xiàng)目開發(fā)過(guò)程中,我們經(jīng)常需要一些工具來(lái)幫助我們保持代碼質(zhì)量,提高開發(fā)效率。今天,我們要介紹四個(gè) Python 工程的最佳伴侶:isort、flake8、black 和 mypy。
01 isort:讓導(dǎo)入看起來(lái)整齊
isort 是一個(gè) Python 工具,可以自動(dòng)在 Python 文件中排序和格式化 import 語(yǔ)句。它可以幫助我們確保所有的 import 語(yǔ)句都遵循相同的標(biāo)準(zhǔn),使得代碼看起來(lái)更清晰,更易于閱讀。
02 flake8:代碼風(fēng)格一致性
flake8 是一個(gè) Python 代碼風(fēng)格檢查工具。它可以幫助我們發(fā)現(xiàn)代碼中的風(fēng)格問題,例如行長(zhǎng)度過(guò)長(zhǎng)、不符合 PEP8 標(biāo)準(zhǔn)的命名、未使用的變量等問題。通過(guò)使用 flake8,我們可以確保代碼風(fēng)格的一致性,提高代碼的可讀性。下面讓我們通過(guò)一個(gè)示例來(lái)看一下 Flake8 是如何工作的。
首先,我們需要一個(gè)有一些風(fēng)格問題的 Python 代碼。假設(shè)我們有以下的代碼:
這段代碼雖然可以正確運(yùn)行,但是它不符合 PEP 8 的代碼風(fēng)格規(guī)定。比如,函數(shù)參數(shù)列表中的逗號(hào)后應(yīng)該有一個(gè)空格,而不是前面;return 語(yǔ)句后的運(yùn)算符兩側(cè)應(yīng)該都有空格。
接下來(lái),我們可以使用 Flake8 來(lái)檢查這段代碼。運(yùn)行以下命令:
flake8 example.pyFlake8 會(huì)輸出以下信息:
這里,E201、E202 和 E225 是 Flake8 針對(duì)不同類型問題的錯(cuò)誤代碼。你可以在 Flake8 的規(guī)則列表 中找到這些錯(cuò)誤代碼的詳細(xì)解釋。
有了這些錯(cuò)誤信息,我們就可以逐一修正代碼中的問題,使之符合 PEP 8 的規(guī)定:
只能告訴你,哪里的代碼風(fēng)格不符合規(guī)范,我們要手動(dòng)改,非常難受, 下面這個(gè)工具black就可以自動(dòng)幫我們格式化代碼符合python規(guī)范。
03 black:自動(dòng)化代碼格式化
black 是一個(gè) Python 代碼自動(dòng)格式化工具。你可以把它看作是一個(gè)“無(wú)需配置”的 flake8,它會(huì)自動(dòng)把你的代碼格式化到 PEP 8 標(biāo)準(zhǔn)。這意味著我們可以花更少的時(shí)間在代碼格式化上,而將更多的精力放在解決實(shí)際的問題上。
需要注意的是, black 有一個(gè)默認(rèn)的行長(zhǎng)度限制(88個(gè)字符),這可能會(huì)和 fake8 的默認(rèn)行長(zhǎng)度限制(79個(gè)字符)沖突。如果你想一起使用這兩個(gè)工具,你可能需要在 flake8 的配置文件中設(shè)置 max-line-length = 88 ,以避免不必要的沖突。或者把 black 改成79個(gè)字符。如在python項(xiàng)目中的 pyproject.tom1 中進(jìn)行統(tǒng)一配置:
04 mypy:靜態(tài)類型檢查
mypy 是一個(gè) Python 靜態(tài)類型檢查工具。雖然 Python 是一門動(dòng)態(tài)類型的語(yǔ)言,但在某些情況下,使用靜態(tài)類型可以幫助我們發(fā)現(xiàn)潛在的問題。mypy 可以檢查我們的代碼,確保我們的類型注解是正確的。
$ mypy my_script.pymy_script.py: note: In function "greeting":my_script.py:2: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"在 Python 項(xiàng)目開發(fā)過(guò)程中,isort、flake8、black 和 mypy 是我們的最佳伴侶。它們可以幫助我們維護(hù)代碼質(zhì)量,提高開發(fā)效率。本文僅僅告訴你他們最基本的使用, 在生產(chǎn)的時(shí)候,我們可以把他們安裝到我們的IDE,如pycharm,vscode。也可以結(jié)合到CICD的流程,讓大家的代碼風(fēng)格規(guī)范都統(tǒng)一起來(lái)。