Python?Black代碼格式化終極指南
Black的背景
Black的起源和發(fā)展歷程
Black是由意大利程序員賈庫(kù)倫·瑞科(?ukasz Langa)于2018年創(chuàng)建的一款開(kāi)源Python代碼格式化工具。他的初衷是通過(guò)強(qiáng)制一致的代碼風(fēng)格來(lái)提高代碼的可讀性,減少開(kāi)發(fā)者之間關(guān)于代碼格式的爭(zhēng)論,從而使團(tuán)隊(duì)更容易協(xié)作。
在起初的幾個(gè)版本中,Black受到了一些爭(zhēng)議,因?yàn)樗捎昧艘环N非常嚴(yán)格的風(fēng)格,例如使用單引號(hào)而不是雙引號(hào),以及強(qiáng)制行長(zhǎng)限制等。然而,隨著時(shí)間的推移,Black在社區(qū)中逐漸獲得了認(rèn)可,因?yàn)樗脑O(shè)計(jì)哲學(xué)更加注重一致性和簡(jiǎn)潔。
Black的基本格式化效果
一個(gè)簡(jiǎn)單的Python函數(shù)示例演示Black的基本格式化效果:
# 未格式化的代碼 def add ( x, y ) : return x+y
運(yùn)行Black進(jìn)行格式化:
black example.py
格式化后的代碼:
# 格式化后的代碼 def add(x, y): return x + y
從這個(gè)簡(jiǎn)單的例子中可以看到,Black會(huì)自動(dòng)調(diào)整縮進(jìn)、添加適當(dāng)?shù)目崭?,使代碼更加一致和易讀。
安裝與配置
1. 安裝Black
首先,需要使用pip安裝Black。在終端或命令提示符中執(zhí)行以下命令:
pip install black
這將會(huì)安裝最新版本的Black。
2. 創(chuàng)建配置文件
為了定制Black的行為,可以創(chuàng)建一個(gè)名為pyproject.toml
的配置文件。在項(xiàng)目根目錄下執(zhí)行以下命令:
touch pyproject.toml
3. 基本配置選項(xiàng)
在pyproject.toml
中,可以配置Black的一些基本選項(xiàng),例如行寬度(line-length
)和目標(biāo)Python版本(target-version
)。
# pyproject.toml [tool.black] line-length = 88 target-version = ['py38']
在這個(gè)示例中,將行寬度設(shè)置為88個(gè)字符,并指定目標(biāo)Python版本為3.8??梢愿鶕?jù)項(xiàng)目需求進(jìn)行相應(yīng)的調(diào)整。
4. 更多配置選項(xiàng)
除了基本選項(xiàng)之外,Black還提供了許多其他配置選項(xiàng),以滿足不同項(xiàng)目的需求。以下是一些示例:
exclude
: 用于指定要忽略的文件或目錄。例如:
# pyproject.toml [tool.black] exclude = ''' /tests/ /docs/ '''
skip-string-normalization
: 如果不希望對(duì)字符串進(jìn)行規(guī)范化,可以使用此選項(xiàng)。例如:
# pyproject.toml [tool.black] skip-string-normalization = true
use-tabs
: 如果項(xiàng)目使用制表符而不是空格,請(qǐng)啟用此選項(xiàng)。例如:
# pyproject.toml [tool.black] use-tabs = true
5. 運(yùn)行Black
配置完成后,可以在終端中運(yùn)行Black,以格式化項(xiàng)目中的所有符合條件的Python文件。
black .
以上示例展示了如何安裝Black并配置一些基本選項(xiàng)。通過(guò)在pyproject.toml
文件中添加適當(dāng)?shù)呐渲?,可以根?jù)項(xiàng)目的需求定制Black的行為。
基本用法
Black的基本用法非常簡(jiǎn)單,只需在終端或命令行中運(yùn)行Black,并指定要格式化的目標(biāo)文件或目錄。
1. 安裝Black
首先,確保已經(jīng)安裝了Black。如果沒(méi)有安裝,可以使用以下命令進(jìn)行安裝:
pip install black
2. 運(yùn)行Black
在終端中,進(jìn)入項(xiàng)目目錄,并運(yùn)行以下命令:
black .
這個(gè)命令將會(huì)格式化當(dāng)前目錄下的所有符合條件的Python文件。也可以指定具體的文件或目錄,例如:
black my_file.py my_directory/
3. 自動(dòng)遞歸
默認(rèn)情況下,Black會(huì)遞歸地格式化目錄下的所有文件。如果想要顯示哪些文件被格式化了,可以加上--check
選項(xiàng),Black將只檢查格式而不進(jìn)行實(shí)際的修改。
black --check .
4. 檢查格式差異
如果想查看格式化前后的具體差異,可以使用--diff
選項(xiàng):
black --diff .
這個(gè)選項(xiàng)會(huì)顯示格式化前后的差異,但并不會(huì)實(shí)際修改文件。
5. 在編輯器中使用
許多代碼編輯器都支持Black的集成,使得在編輯器中直接應(yīng)用格式化變得更加方便。例如,在VSCode中,可以安裝插件并配置以在保存文件時(shí)自動(dòng)運(yùn)行Black。
Black的特性
Black作為一款強(qiáng)大的Python代碼格式化工具,不僅提供了基本的格式化功能,還支持一些高級(jí)特性,使其更加靈活和適應(yīng)不同的項(xiàng)目需求。
1. 忽略文件和目錄
Black允許你通過(guò)配置文件來(lái)指定要忽略的文件或目錄,以便在格式化時(shí)排除特定的部分。在pyproject.toml
中使用exclude
選項(xiàng):
# pyproject.toml [tool.black] exclude = ''' /tests/ /docs/ '''
在這個(gè)例子中,Black將忽略項(xiàng)目中的/tests/
和/docs/
目錄下的文件。
2. 自定義行寬和縮進(jìn)
通過(guò)配置文件,你可以輕松地調(diào)整Black的一些格式化設(shè)置,如行寬度和縮進(jìn)。例如,將行寬度設(shè)置為120,使用制表符而不是空格:
# pyproject.toml [tool.black] line-length = 120 use-tabs = true
這個(gè)配置將使Black在格式化時(shí)將行寬度限制為120個(gè)字符,并使用制表符進(jìn)行縮進(jìn)。
3. 編輯器集成
Black與許多流行的代碼編輯器集成得很好。在許多編輯器中,你可以通過(guò)配置使Black在保存文件時(shí)自動(dòng)運(yùn)行。以VSCode為例,在settings.json
文件中添加以下配置:
// settings.json "editor.formatOnSave": true, "python.formatting.provider": "black"
這樣配置后,每次保存Python文件時(shí),Black都會(huì)自動(dòng)格式化代碼。
4. 額外的命令行選項(xiàng)
除了配置文件之外,Black還提供了一些命令行選項(xiàng),允許你在運(yùn)行時(shí)覆蓋特定的設(shè)置。例如,你可以使用--check
選項(xiàng)來(lái)檢查代碼是否符合Black的格式,而不進(jìn)行實(shí)際的格式化。
black --check .
5. 在版本控制中使用
Black的格式化輸出通常會(huì)修改文件,因此在版本控制中使用時(shí)需要小心。你可以使用--diff
選項(xiàng)來(lái)查看格式化前后的差異,而不實(shí)際修改文件:
black --diff .
這能夠在提交代碼之前檢查潛在的更改。
通過(guò)深入了解Black的高級(jí)特性,你可以更好地定制工具以適應(yīng)你的項(xiàng)目需求。這些特性使Black成為一個(gè)強(qiáng)大而靈活的代碼格式化工具,適用于各種Python項(xiàng)目。
Black與其他格式化工具的比較
Black、YAPF和autopep8都是Python代碼格式化工具,它們各自有著獨(dú)特的設(shè)計(jì)理念和特點(diǎn)。以下是它們之間的一些比較:
1. 設(shè)計(jì)理念
Black: Black的設(shè)計(jì)理念強(qiáng)調(diào)一致性和簡(jiǎn)潔。它采用了一種“不容商量”的方式,通過(guò)強(qiáng)制一種固定的代碼風(fēng)格來(lái)減少開(kāi)發(fā)者之間的爭(zhēng)論,確保整個(gè)項(xiàng)目的代碼具有一致性。
YAPF: YAPF(Yet Another Python Formatter)也注重一致性,但相對(duì)于Black,它提供了更多的配置選項(xiàng),允許用戶根據(jù)自己的偏好調(diào)整格式化的細(xì)節(jié)。
autopep8: autopep8的目標(biāo)是自動(dòng)修復(fù)PEP 8規(guī)范中的問(wèn)題。它側(cè)重于通過(guò)調(diào)整空格、縮進(jìn)等方式來(lái)使代碼符合PEP 8標(biāo)準(zhǔn),但并不強(qiáng)制一種特定的風(fēng)格。
2. 配置選項(xiàng)
Black: Black的配置選項(xiàng)相對(duì)較少。它更傾向于采用一組默認(rèn)的風(fēng)格規(guī)則,以簡(jiǎn)化配置,并鼓勵(lì)項(xiàng)目中所有的代碼都采用相同的風(fēng)格。
YAPF: YAPF提供了大量的配置選項(xiàng),使用戶可以精細(xì)調(diào)整格式化的行為。這使得YAPF更加適用于那些需要高度定制的項(xiàng)目。
autopep8: autopep8也提供了一些配置選項(xiàng),允許用戶在一定程度上調(diào)整格式化規(guī)則,但相較于YAPF,它的配置相對(duì)簡(jiǎn)單。
3. 自動(dòng)化程度
Black: Black的自動(dòng)化程度非常高。它幾乎沒(méi)有人為干預(yù)的余地,通過(guò)運(yùn)行一次命令即可完成整個(gè)項(xiàng)目的代碼格式化。
YAPF: YAPF在自動(dòng)化程度上也很高,但相對(duì)于Black,它提供了更多的配置選項(xiàng),使用戶可以更靈活地調(diào)整代碼風(fēng)格。
autopep8: autopep8的自動(dòng)化程度較高,但用戶在使用時(shí)仍有一定的控制權(quán),可以選擇性地應(yīng)用或忽略某些修復(fù)。
4. 速度
Black: Black在速度上通常較快,尤其是對(duì)于大型項(xiàng)目。它通過(guò)強(qiáng)制一致的規(guī)則來(lái)提高處理速度。
YAPF: YAPF的速度也較快,但由于提供了更多的配置選項(xiàng),可能在處理復(fù)雜格式時(shí)稍顯耗時(shí)。
autopep8: autopep8通常也能夠快速處理格式化,但在處理復(fù)雜代碼時(shí)可能略顯緩慢。
5. 社區(qū)支持與活躍度
Black: Black在Python社區(qū)中逐漸獲得了廣泛的認(rèn)可,得到了許多項(xiàng)目的采用,并且其開(kāi)發(fā)仍然非?;钴S。
YAPF: YAPF同樣受到了較多項(xiàng)目的青睞,具有一定的社區(qū)支持和活躍度。
autopep8: autopep8作為一個(gè)解決PEP 8規(guī)范的工具,也得到了廣泛的應(yīng)用,但在一些新項(xiàng)目中可能受到Black和YAPF的競(jìng)爭(zhēng)。
總結(jié)
Black作為一款Python代碼格式化工具,在項(xiàng)目中有其獨(dú)特的優(yōu)勢(shì)。其設(shè)計(jì)理念注重一致性和簡(jiǎn)潔,通過(guò)強(qiáng)制一種規(guī)范的代碼風(fēng)格,減少了開(kāi)發(fā)者間的爭(zhēng)議,提高了整體代碼的可讀性。Black的自動(dòng)化程度極高,簡(jiǎn)單的命令即可完成整個(gè)項(xiàng)目的代碼格式化,使得團(tuán)隊(duì)能夠更輕松地維持一致的代碼規(guī)范。
相較于其他格式化工具如YAPF和autopep8,Black在速度上表現(xiàn)出色,特別適合處理大型項(xiàng)目。盡管配置選項(xiàng)相對(duì)較少,但這也有助于項(xiàng)目?jī)?nèi)部的一致性。Black在Python社區(qū)中得到廣泛認(rèn)可,越來(lái)越多的項(xiàng)目采用它作為首選格式化工具。然而,對(duì)于一些需要更多定制選項(xiàng)的項(xiàng)目,YAPF和autopep8可能更為適用。
在選擇格式化工具時(shí),團(tuán)隊(duì)?wèi)?yīng)權(quán)衡工具的自動(dòng)化程度、靈活性以及與項(xiàng)目需求的契合度。Black的簡(jiǎn)潔和高效使其成為許多團(tuán)隊(duì)的選擇,為項(xiàng)目提供了一致的、易讀的代碼風(fēng)格。
以上就是Python Black代碼格式化終極指南的詳細(xì)內(nèi)容,更多關(guān)于Python Black代碼格式化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)兩組數(shù)據(jù)縱向排序
在數(shù)據(jù)分析和處理過(guò)程中,排序是一項(xiàng)非常常見(jiàn)的操作,本文將詳細(xì)講解如何使用Python實(shí)現(xiàn)兩組數(shù)據(jù)的縱向排序,并提供完整的開(kāi)發(fā)思路和代碼示例,需要的可以參考下2024-12-12Python如何用str.format()批量生成網(wǎng)址(豆瓣讀書(shū)為例)
這篇文章主要介紹了Python如何用str.format()批量生成網(wǎng)址(豆瓣讀書(shū)為例),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Python打包后的exe還原成.py的實(shí)現(xiàn)步驟
本文主要介紹了Python打包后的exe還原成.py的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02利用Python監(jiān)控設(shè)備電池電量并發(fā)送通知
在日常使用電子設(shè)備時(shí),及時(shí)了解電池電量狀態(tài)并進(jìn)行合理充電是非常重要的,本文將使用Python進(jìn)行設(shè)備電池電量的監(jiān)控并發(fā)送通知,有需要的可以了解下2025-03-03python使用tesseract實(shí)現(xiàn)字符識(shí)別功能
Tesseract 是一個(gè)開(kāi)源的光學(xué)字符識(shí)別(OCR)引擎,它能夠識(shí)別多種語(yǔ)言的文本,可將掃描文檔、圖像中的文字提取并轉(zhuǎn)換為計(jì)算機(jī)可編輯的文本格式,本文給大家介紹了python使用tesseract實(shí)現(xiàn)字符識(shí)別功能,需要的朋友可以參考下2024-10-10詳解Python中如何將數(shù)據(jù)存儲(chǔ)為json格式的文件
這篇文章主要介紹了詳解Python中如何將數(shù)據(jù)存儲(chǔ)為json格式的文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11基于python 爬蟲(chóng)爬到含空格的url的處理方法
今天小編就為大家分享一篇基于python 爬蟲(chóng)爬到含空格的url的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05