原文:http://inventwithpython.com/beyond/chapter3.html
代碼格式化是將一組規(guī)則應用于源代碼,從而使得代碼風格能夠簡潔統(tǒng)一。雖然代碼格式對解析程序的計算機來說不重要,但代碼格式對于可讀性是至關重要的,這是維護代碼所必需的條件。如果你的代碼對人(無論是你還是同事)來說都很難理解,那么就很難修復錯誤或添加新功能。格式化代碼不僅僅是一個風格的問題。并且 Python 的可讀性也是該語言受歡迎的一個重要原因。
本章向您介紹 Black,它是一個代碼格式化工具,可以自動將您的源代碼格式化成一致的、可讀的樣式,而不改變您的程序的功能。Black 很有用,因為在文本編輯器或 IDE 中手動格式化代碼很繁瑣。您將首先了解使用 Black 格式化代碼的合理性。然后,您將學習如何安裝、使用和定制該工具。
如何失去朋友和疏遠同事
我們可以用多種方式編寫代碼,產生相同的行為。例如,我們可以編寫一個列表,在每個逗號后加一個空格,并始終使用一種引用字符:
spam = ['dog', 'cat', 'moose']
但是,即使我們用不同數量的空格和不同的引號樣式編寫列表,這在語法上仍然是有效的 Python 代碼:
spam= [ 'dog' ,'cat',"moose"]
喜歡前一種方法的程序員可能喜歡空格添加的視覺分隔和引號字符的一致性。但程序員有時會選擇后者,因為他們這要保證程序功能正確即可,代碼可讀性的細節(jié)不做過度考慮。
初學者經常忽略代碼格式,因為他們專注于編程概念和語言語法。但是對于初學者來說,建立良好的代碼格式化習慣是很有價值的。編程已經夠難的了,給別人(或者以后給自己)寫可以理解的代碼,在分析代碼問題時就不會因為可讀性而頭疼了。
盡管您可能需要獨自編寫代碼,但編程通常是一項協(xié)作活動。如果幾個程序員在同一個源代碼文件上工作,用他們自己的風格編寫,代碼可能會變得不一致,混亂不堪,即使它運行時沒有錯誤?;蛘吒愕氖牵绦騿T會不斷地將彼此的代碼重新格式化成他們自己的風格,浪費時間并引起爭論。比如說,決定在逗號后面加一個還是零個空格是個人喜好的問題。這些代碼風格選擇很像決定在道路的哪一邊行駛;人們是在路的右邊還是左邊開車并不重要,重要的是大家都要習慣于在同一邊開車。
風格指南和 PEP8
編寫可讀代碼的一個簡單方法是遵循風格指南,這是一個概述了一套軟件項目應該遵循的格式規(guī)則的文檔。由 Python 核心開發(fā)團隊編寫的 Python 增強提案 8(PEP8)就是這樣一個風格指南。但是一些軟件公司也建立了他們自己的風格指南。
你可以在www.python.org/dev/peps/pep-0008
在線閱讀 PEP8。許多 Python 程序員將 PEP8 視為一組權威的規(guī)則,盡管 PEP8 的創(chuàng)建者們不這么認為。指南的“愚蠢的一致性是心胸狹窄的妖怪”一節(jié)提醒讀者,保持項目中的一致性和可讀性,而不是遵守任何個人的格式規(guī)則,是編寫這個格式指南的主要原因。
PEP8 甚至包括以下建議:“知道什么時候不一致——有時風格指南的建議并不適用。如有疑問,請做出最佳判斷?!睙o論您是全部遵循、部分遵循還是一點都不遵循,都值得閱讀 PEP8 文檔。
因為我們使用了 Black 來格式化代碼程序,所以我們的代碼將遵循 Black 的樣式指南,該指南改編自 PEP8 的樣式指南。您應該學習這些代碼格式指南,因為您在某些特殊環(huán)境下編碼的時候可能不能使用Black
來格式化代碼。您在本章中學習的 Python 代碼指南通常也適用于其他語言,這些語言可能沒有可用的自動格式化程序。
我并不喜歡 Black 的所有代碼格式,但我認為這是一個很好的妥協(xié)。Black 使用程序員可以忍受的格式規(guī)則,讓我們花更少的時間爭論,花更多的時間編程。
水平間距
空白對于可讀性來說和你寫的代碼一樣重要。這些空格有助于將代碼的不同部分彼此分開,使它們更容易識別。本節(jié)解釋了水平間距——即單行代碼中空白間隔,包括該行前面的縮進大小。
使用空格字符的縮進
縮進是代碼行開頭的空格。您可以使用兩個空白字符(空格或制表符)中的一個來縮進代碼。盡管這兩種字符都有效,但最佳實踐是使用空格而不是制表符進行縮進。
原因是這兩種方式的行為方式不同。一個空格字符總是在屏幕上呈現為帶有一個空格的字符串值,就像這個' '
。但是制表符,即包含轉義字符或'\t'
的字符串值,更不明確。制表符通常(但不總是)呈現為可變的間距量,因此下面的文本從下一個制表位開始。在文本文件的寬度上,制表位代表八個空格符。您可以在下面的交互式 Shell 示例中看到這種變化,該示例首先用空格字符分隔單詞,然后用制表符分隔單詞:
>>> print('Hello there, friend!\nHow are you?')
Hello there, friend!
How are you?
>>> print('Hello\tthere,\tfriend!\nHow\tare\tyou?')
Hello there, friend!
How are you?
因為制表符代表不同寬度的空白,你應該避免在你的源代碼中使用它們。當你按下Tab
鍵鍵而不是一個制表符時,大多數代碼編輯器和 ide 會自動插入四或八個空格字符。
你也不能在同一個代碼塊中使用制表符和空格來縮進。在早期的 Python 程序中,使用兩者進行縮進是一個錯誤的萬惡之源,以至于 Python3 甚至不會運行帶有縮進的代碼;而是引發(fā)一個TabError: inconsistent use of tabs and spaces in indentation
異常。Black 會自動將您用于縮進的任何制表符轉換為四個空格字符。
至于每一級縮進的長度,Python 代碼中通常的做法是每一級縮進四個空格。以下示例中的空格字符用句號標記空格,以使其可見:
def getCatAmount():
....numCats = input('How many cats do you have?')
....if int(numCats) < 6:
........print('You should get more cats.')
與備選方案相比,四個空格的標準有實際的好處;在每一級縮進中使用八個空格會導致代碼很快超出行長度限制,而在每一級縮進中使用兩個空格會使縮進中的差異難以看出。程序員通常不會考慮其他數量,比如三個或六個空格,因為他們和一般的二進制計算一樣,首選二的冪:2、4、8、16 等等。
行內間距
水平間距不僅僅是縮進??崭駥τ谧尦绦騿T在視覺上對代碼進行分塊是很重要的。如果您從不使用空格字符調整間距,那么您的行可能會變得密集而難以解析。以下小節(jié)提供了一些需要遵循的間距規(guī)則。
在操作符和標識符之間加一個空格
如果你不在操作符和標識符之間留空格,你的代碼看起來會一起運行。例如,這一行用空格分隔運算符和變量:
blanks = blanks[:i] + secretWord[i] + blanks[i + 1 :] # YES
這一行刪除所有空格:
$1 # NOblanks=blanks[:i]+secretWord[i]+blanks[i+1:]
在這兩種情況下,代碼都使用了+
操作符將三個值相加,但是如果沒有空格,blanks[i+1:]
中的+
看起來像是在添加第四個值??崭袷沟眠@個+
是blanks
中值的一部分變得更加明顯。
分隔符前不加空格,分隔符后加一個空格
我們用逗號分隔條目列表和字典,以及函數def
語句中的參數。您不應在這些逗號前放置空格,而應在逗號后放置一個空格,如下例所示:
def spam(eggs, bacon, ham): # YES
weights = [42.0, 3.1415, 2.718] # YES
否則,您最終會得到更難閱讀的“攪合”代碼:
$1 # NOdef spam(eggs,bacon,ham):
$1 # NO weights = [42.0,3.1415,2.718]
不要在分隔符前添加空格,因為不要將注意力放在分隔符上:
$1 # NOdef spam(eggs , bacon , ham):
$1 # NO weights = [42.0 , 3.1415 , 2.718]
Black 會自動在逗號后面插入一個空格,并刪除逗號前面的空格。
不要在句號之前或之后加空格
Python 允許您在標記 Python 屬性開頭的點號前后插入空格,但您應該避免這樣做。通過不在那里放置空格,可以強調對象與其屬性之間的聯系,如下例所示:
'Hello, world'.upper() # YES
如果您在句號之前或之后添加空格,對象和屬性看起來就像彼此無關:
$1 # NO'Hello, world' . upper()
Black 會自動刪除句號周圍的空格。
不要在函數、方法或容器名后加空格
我們很容易識別函數和方法名,因為它們后面有一組括號,所以不要在名字和左括號之間加空格。我們通常會編寫這樣的函數調用:
print('Hello, world!') # YES
但是添加一個空格會使這個函數調用看起來像是在做兩件不同的事情:
$1 # NOprint ('Hello, world!')
Black 刪除函數或方法名與其左括號之間的任何空格。
同樣,不要在索引、切片或鍵的方括號前加空格。我們通常訪問容器類型(如列表、字典或元組)中的項,而不在變量名和左方括號之間添加空格,如下所示:
spam[2] # YES
spam[0:3] # YES
pet['name'] # YES
再次添加空格會使代碼看起來像兩個獨立的東西:
$1 # NOspam [2]
$1 # NOspam [0:3]
$1 # NOpet ['name']
Black 刪除變量名和左方括號之間的任何空格。
不要在左括號后或右括號前加空格
圓括號、方括號或大括號及其內容之間不應有空格。例如,def
語句中的參數或列表中的值應該緊接在圓括號和方括號的前后開始和結束:
def spam(eggs, bacon, ham): # YES
weights = [42.0, 3.1415, 2.718] # YES
不應在左括號或右括號或方括號之后或之前添加空格:
$1 # NOdef spam( eggs, bacon, ham ):
$1 # NO weights = [ 42.0, 3.1415, 2.718 ]
添加這些空格不會提高代碼的可讀性,所以沒有必要。如果代碼中存在這些空格,Black 將刪除它們。
在行尾注釋前加兩個空格
如果您在代碼行的末尾添加注釋,請在代碼的末尾和開始注釋的#
字符之前添加兩個空格:
print('Hello, world!') # Display a greeting. # YES
這兩個空格使得區(qū)分代碼和注釋更加容易。一個空格,或者更糟的是,沒有空格,會使人更難注意到代碼和注釋的分離:
$1 # NOprint('Hello, world!') # Display a greeting.
$1 # NOprint('Hello, world!')# Display a greeting.
Black 在代碼的結尾和注釋的開頭之間加了兩個空格。
一般來說,我建議不要把注釋放在代碼行的末尾,因為它們會使代碼行太長而無法在屏幕上閱讀。
垂直間距
垂直間距是代碼行之間空白行的位置。就像書中的新段落可以防止句子形成文本墻一樣,垂直間距可以將某些代碼行組合在一起,并將這些組彼此分開。
PEP8 有幾個在代碼中插入空行的準則:它規(guī)定你應該用兩個空行分隔函數,用兩個空行分隔類,用一個空行分隔類內的方法。Black 通過在代碼中插入或刪除空行來自動遵循這些規(guī)則,將代碼:
$1 # NOclass ExampleClass:
def exampleMethod1():
pass
def exampleMethod2():
pass
def exampleFunction():
pass
。。。到這段代碼中:
class ExampleClass: # YES
def exampleMethod1():
pass
def exampleMethod2():
pass
def exampleFunction():
pass
垂直間距示例
Black 不能做的是決定你的函數、方法或全局范圍內的空行應該在哪里。將那些行組合在一起是程序員的主觀決定。
例如,讓我們看看 Django Web 應用框架中的validators.py
中的EmailValidator
類。你沒必要去理解這個代碼是如何工作的。但是請注意空行是如何將__call__()
方法的代碼分成四組的:
`--snip--`
def __call__(self, value):
1 if not value or '@' not in value:
raise ValidationError(self.message, code=self.code)
2 user_part, domain_part = value.rsplit('@', 1)
3 if not self.user_regex.match(user_part):
raise ValidationError(self.message, code=self.code)
4 if (domain_part not in self.domain_whitelist and
not self.validate_domain_part(domain_part)):
# Try for possible IDN domain-part
try:
domain_part = punycode(domain_part)
except UnicodeError:
pass
else:
if self.validate_domain_part(domain_part):
return
raise ValidationError(self.message, code=self.code)
`--snip--`
盡管沒有注釋來描述這部分代碼,但是空白行表明這些組在概念上是不同的。第一組 1 檢查value
參數中的@
符號。這個任務與第二組 2 的任務不同,第二組將value
中的電子郵件地址字符串拆分成兩個新變量user_part
和domain_part
。第三組 3 和第四組 4 分別使用這些變量來驗證電子郵件地址的用戶和域兩個部分是否合法。
雖然第四組有 11 行,遠遠多于其他組,但它們都是驗證電子郵件地址域的任務。如果您認為該任務確實由多個子任務組成,您可以插入空行來分隔它們。
Django 這一部分的程序員決定域驗證行應該都屬于一個組,但是其他程序員可能不同意。因為這是主觀的,所以 Black 不會修改函數或方法中的垂直間距。
垂直間距最佳實踐
Python 的一個鮮為人知的特性是,可以使用分號在一行中分隔多個語句。這意味著下面兩行:
print('What is your name?')
name = input()
。。。如果用分號隔開,可以寫在同一行上:
print('What is your name?'); name = input()
就像使用逗號一樣,分號前不要加空格,分號后加一個空格。
對于以冒號結尾的語句,如if
、while
、for
、def
或class
語句,使用單行塊,如本例中對print()
的調用:
if name == 'Alice':
print('Hello, Alice!')
。。。可以和它的if
語句寫在同一行:
if name == 'Alice': print('Hello, Alice!')
但是僅僅因為 Python 允許在同一行中包含多個語句并不意味著這是一個好的示例。這會導致代碼行太寬,一行代碼中的內容太多。Black 將這些語句拆分成單獨的行。
類似地,您可以用一條import
語句導入多個模塊:
import math, os, sys
即便如此,PEP8 建議您將該語句拆分為每個模塊一個import
語句:
import math
import os
import sys
如果您為導入模塊編寫單獨的行,當您在使用版本控制系統(tǒng)的差異工具中比較更改時,您將更容易發(fā)現導入模塊的變動。(版本控制系統(tǒng),如 Git,將在第 12 章中介紹。)
PEP8 還建議將import
語句按以下順序分成三組:
- Python 標準庫中的模塊,如
math
、os
和sys
- 第三方模塊,如 Selenium、Requests 或 Django
- 作為程序一部分的本地模塊
這些準則是可選的,Black 不會改變代碼的import
語句的格式。
Black:不妥協(xié)的代碼格式化程序
Black 會自動格式化您的的代碼.py
文件。雖然你應該理解本章中的格式規(guī)則,但是 Black 可以為你做所有定制的樣式。如果你正在和其他人一起做一個編碼項目,你可以通過自定義 Black 格式化代碼風格來降低和其他人的溝通成本。
你不能改變 Black 遵循的許多規(guī)則,這就是為什么它被描述為“不妥協(xié)的代碼格式化程序”事實上,這個工具的名字來源于亨利·福特關于他提供給顧客的汽車顏色選擇的名言:“你可以要任何你想要的顏色,只要是 Black 的。”
我剛剛描述了 Black 使用的確切風格;你可以在black.readthedocs.io/en/stable/the_black_code_style
找到布萊克的完整風格指南。
安裝 Black
使用 Python 自帶的pip
工具安裝 Black。在 Windows 中,通過打開命令提示符窗口并輸入以下內容來完成此操作:
C:\Users\Al\>python -m pip install --user black
在 MacOS 和 Linux 上,打開一個終端窗口,輸入python3
而不是python
(本書中所有使用python
的指令都應該這樣做):
Als-MacBook-Pro:~ al$ python3 -m pip install --user black
-m
選項告訴 Python 將pip
模塊作為應用運行,一些 Python 模塊就是這樣設置的。通過運行python -m black
測試安裝是否成功。你應該看到消息No paths given. Nothing to do.
而不是No module named black.
從命令行運行 Black
您可以從命令提示符或終端窗口對任何 Python 文件運行 Black。此外,您的 IDE 或代碼編輯器可以在后臺運行 Black。你可以在布萊克的主頁github/psf/black
上找到讓 Black 使用 Jupyter Notebook、Visual Studio Code、PyCharm 和其他編輯器的說明。
假設您想要自動格式化一個名為yourScript.py
的文件。在 Windows 的命令行中,運行以下命令(在 MacOS 和 Linux 上,使用python3
命令而不是python
):
C:\Users\Al>python -m black yourScript.py
運行該命令后,yourScript.py
的內容將根據 Black 的樣式指南進行格式化。
您的PATH
環(huán)境變量可能已經設置為直接運行 Black,在這種情況下,您只需輸入以下內容即可格式化yourScript.py
:
C:\Users\Al>black yourScript.py
如果你想在一個文件夾中所有的.py
文件跑一次 Black,指定單個文件夾而不是單個文件。以下 Windows 示例格式化C:\yourPythonFiles
文件夾中的每個文件,包括其子文件夾:
C:\Users\Al>python -m black C:\yourPythonFiles
如果您的項目包含多個 Python 文件,并且您不想為每個文件輸入命令,則指定文件夾非常有用。
盡管 Black 對如何格式化代碼有相當嚴格的要求,但接下來的三個小節(jié)描述了一些你可以改變的選項。要查看 Black 提供的全部選項,請運行python -m black --help
。
調整 Black 行長度設置
Python 代碼的標準行長度為 80 個字符。80 字符行的歷史可以追溯到 20 世紀 20 年代穿孔卡計算時代,當時 IBM 推出了 80 列 12 行的穿孔卡。在接下來的幾十年里,打印機、顯示器和命令行窗口都保留了 80 列的標準。
但在 21 世紀,高分辨率屏幕可以顯示超過 80 個字符寬的文本。較長的行長度可以讓您不必垂直滾動來查看文件。較短的行長度可以防止過多的代碼擠在一行上,并允許您并排比較兩個源代碼文件,而不必水平滾動。
Black 使用默認的每行 88 個字符,這是相當隨意的,因為它比標準的 80 個字符多 10%。我傾向于使用 120 個字符。例如,要告訴 Black 使用 120 個字符的行長度限制來格式化您的代碼,請使用-l 120
(這是小寫字母L
而不是數字 1)在命令行選項。在 Windows 上,該命令如下所示:
C:\Users\Al>python -m black -l 120 yourScript.py
無論您為項目選擇什么樣的行長度限制,所有的.py
文件應該使用相同的限制。
禁用 Black 的雙引號字符串設置
Black 自動將代碼中的任何字符串字面值從使用單引號更改為雙引號,除非字符串包含雙引號字符,在這種情況下,它使用單引號。例如,假設yourScript.py
包含以下內容:
a = 'Hello'
b = "Hello"
c = 'Al\'s cat, Zophie.'
d = 'Zophie said, "Meow"'
e = "Zophie said, \"Meow\""
f = '''Hello'''
在yourScript.py
上運行 Black 會將它格式化成這樣:
a = "Hello" # 1
b = "Hello"
c = "Al's cat, Zophie."
d = 'Zophie said, "Meow"' # 2
e = 'Zophie said, "Meow"'
f = """Hello""" # 3
Black 對雙引號的偏好使您的 Python 代碼看起來類似于用其他編程語言編寫的代碼,這些語言通常對字符串字面值使用雙引號。注意變量a
、b
和c
的字符串使用雙引號。變量d
的字符串保留其原來的單引號,以避免轉義字符串 2 中的任何雙引號。注意,對于 Python 的三引號多行字符串 3 ,Black 也使用雙引號。
但是如果您希望 Black 保留您編寫的字符串字面值,并且不改變使用的引號的類型,那么傳遞給它-S
命令行選項。(注意S
是大寫的。)例如,在 Windows 中對原始的yourScript.py
文件運行 Black 會產生以下輸出:
C:\Users\Al>python –m black -S yourScript.py
All done!
1 file left unchanged.
您也可以在同一命令中同時使用-l
線長度限制和-S
選項來限制引用字符串的轉換:
C:\Users\Al>python –m black –l 120 -S yourScript.py
預覽 Black 將做出的更改
雖然 Black 不會重命名您的變量或改變您的程序的行為,但是您可能不喜歡 Black 所做的樣式改變。如果您想堅持原來的格式,您可以對您的源代碼使用版本控制或者維護您自己的備份。或者,您可以通過使用--diff
命令行選項運行 Black 來預覽 Black 將做出的更改,而不會讓它實際更改您的文件。在 Windows 中,它看起來像這樣:
C:\Users\Al>python -m black --diff yourScript.py
這個命令以版本控制軟件通常使用的diff
格式輸出差異,但是它通常是可讀的。例如,如果yourScript.py
包含行weights=[42.0,3.1415,2.718]
,運行--diff
選項將顯示以下結果:
C:\Users\Al\>python -m black --diff yourScript.py
--- yourScript.py 2020-12-07 02:04:23.141417 +0000
+++ yourScript.py 2020-12-07 02:08:13.893578 +0000
@@ -1 +1,2 @@
-weights=[42.0,3.1415,2.718]
+weights = [42.0, 3.1415, 2.718]
減號表示 Black 將刪除線weights= [42.0,3.1415,2.718]
并替換為前綴為加號的線:weights = [42.0, 3.1415, 2.718]
。請記住,一旦您運行 Black 來更改您的源代碼文件,就沒有辦法撤銷這種更改。在運行 Black 之前,您需要備份源代碼或使用版本控制軟件,如 Git。
禁用部分代碼的 Black
盡管 Black 很棒,但您可能不希望它格式化您代碼的某些部分。例如,每當我排列多個相關的賦值語句時,我都喜歡使用自己的特殊間距,如下例所示:
# Set up constants for different time amounts:
SECONDS_PER_MINUTE = 60
SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE
SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR
SECONDS_PER_WEEK = 7 * SECONDS_PER_DAY
Black 將刪除=
賦值操作符前的多余空格,在我看來,這會使它們可讀性更差:
# Set up constants for different time amounts:
SECONDS_PER_MINUTE = 60
SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE
SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR
SECONDS_PER_WEEK = 7 * SECONDS_PER_DAY
通過添加# fmt: off
和# fmt: on
注釋,我們可以告訴 Black 關閉這些行的代碼格式,然后恢復代碼格式:
# Set up constants for different time amounts:
# fmt: off
SECONDS_PER_MINUTE = 60
SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE
SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR
SECONDS_PER_WEEK = 7 * SECONDS_PER_DAY
# fmt: on
在這個文件上運行 Black 現在不會影響這兩個注釋之間的代碼格式。
總結
雖然好的格式是看不見的,但是糟糕的格式會使閱讀代碼變得令人心塞。風格是主觀的,但是軟件開發(fā)領域通常制定什么是好的和差的格式時,同時仍然為個人偏好留有余地。
Python 的語法使得它在風格方面相當靈活。如果你正在寫別人永遠看不到的代碼,你可以想怎么寫就怎么寫。但是大部分軟件開發(fā)是協(xié)作性的。無論您是與他人合作完成一個項目,還是僅僅想請更有經驗的開發(fā)人員來評審您的工作,格式化您的代碼以適應公認的風格指南都是非常重要的。
在編輯器中格式化你的代碼是一項枯燥的任務,你可以用 Black 這樣的工具來自動完成。本章介紹了 Black 為提高代碼可讀性而遵循的幾條準則,包括垂直和水平方向的代碼間距,以防止代碼過于密集而不容易閱讀,以及設置每行的長度限制。Black 為您執(zhí)行這些規(guī)則,來降低您和其它合作者的溝通成本。
但是代碼風格不僅僅是空格和決定單引號和雙引號。例如,選擇描述性變量名也是代碼可讀性的一個關鍵因素。雖然像 Black 這樣的自動化工具可以做出語法決定,比如代碼應該有多少間距,但是它們不能理解語義,比如什么是好的變量名。這是你的責任,我們將在下一章討論這個話題。文章來源:http://www.zghlxwxcb.cn/news/detail-409005.html
譯者注:隨著 NLP 技術的飛速發(fā)著,出現了像 Copilot 等一系列優(yōu)秀的工具,在讓計算機理解語義這些方面都有很大的提升。這些工具是可以協(xié)助程序員想象出更適合的變量名的。文章來源地址http://www.zghlxwxcb.cn/news/detail-409005.html
到了這里,關于Python 進階指南(編程輕松進階):三、使用 Black 工具來格式化代碼的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!