HOWTO · Python

在 Python 中列印中間沒有空格的值

了解如何在 Python 中列印值之間沒有空格:使用 print() 的 sep 參數、f 字串、str.format()、% 格式化、字串串接和字串 Template 取代。

本頁內容

當您將多個引數以逗號分隔傳遞給 print() 函式時,print() 預設會以一個空格將它們連接起來,這有時會導致值之間出現不必要的空格。幸運的是,Python 提供了幾種替代方法,可以幫助您精確控制這種間距。

在本指南中,您將學習在 Python 中列印值之間沒有空格的不同方法。每種方法都以同一個貫穿範例展示,該範例從下面的逗號形式開始:

x = 10
print('The number of mangoes I have is "', x, '"')

輸出:

The number of mangoes I have is " 10 "

注意數字 10 與其周圍雙引號之間的不必要空格:每個逗號產生一個。以下每種方法的目標都是在列印相同值的同時消除這種多餘的間距。

使用帶模 % 符號的字串格式化在 Python 中列印中間沒有空格的值

% 符號,也稱為字串格式化或插值運算子,是 Python 中最古老的格式化方法。字串內的 %d 等佔位符標記了值的位置,% 運算子後面的值會取代它,因此不會在任何地方新增分隔符:

x = 10
print('The number of mangoes I have is "%d"' % x)

輸出:

The number of mangoes I have is "10"

在這裡,%d 是整數的佔位符。當字串被建構時,它會被取代為 x 的值,即 10,列印的文字直接與引號相接。這種風格在 Python 3 中仍然有效,但較新的程式碼通常更喜歡 str.format() 或 f 字串。

使用帶 str.format() 函式的字串格式化在 Python 中列印中間沒有空格的值

使用 str.format() 時,字串內的大括號 {} 標記了取代值的位置。該方法在 Python 3 中引入,能有效率地處理複雜的格式化;由於完成後的字串是傳遞給 print() 的單一引數,因此不會出現分隔符:

x = 10
print('The number of mangoes I have is "{}"'.format(x))

輸出:

The number of mangoes I have is "10"

{} 佔位符位於雙引號內,當字串顯示時會被取代為 x 的值。對於新程式碼,建議使用 str.format() 而不是較舊的 % 運算子。

使用字串串接在 Python 中列印中間沒有空格的值

+ 運算子,即字串串接運算子,將字串首尾相連,並且不會在它們之間新增任何內容,這使它成為逗號分隔的直接替代方案:

x = 10
print('The number of mangoes I have is "' + str(x) + '"')

輸出:

The number of mangoes I have is "10"

串接只能在字串之間進行,因此整數 x 首先以 str() 轉換。然後這些片段形成一個字串 — 'The number of mangoes I have is "'、'10' 和 '"' — 並且 print() 按原樣輸出它。

使用 f-string 進行字串格式化在 Python 中列印中間沒有空格的值

Python 3.6 引入了 f 字串,它將運算式直接嵌入字串字面值中。它們也比上面另外兩種格式化方法更快,因為值在建構字串時就會被求值:

x = 10
print(f'The number of mangoes I have is "{x}"')

輸出:

The number of mangoes I have is "10"

字串前面的 f 前置詞將其變成 f 字串,其中的 {x} 在程式碼執行時被取代為 x 的值。由於變數恰好位於其文字應出現的位置,因此結果簡潔、可讀,且沒有多餘的空格。

使用 print 陳述式的 sep 參數在 Python 中列印中間沒有空格的值

如果您想保留逗號分隔的引數,請更改 print() 在它們之間放置的內容。sep 參數在 Python 3 中可用,它是插入到引數之間的分隔符;預設為單個空格:

x = 10
print('The number of mangoes I have is "', x, '"', sep="")

輸出:

The number of mangoes I have is "10"

將 sep 設定為空字串 "" 會告訴 print() 將各部分 — 開引號之前的文字、x 的值和閉引號 — 以它們之間沒有任何內容的方式連接起來。這是對原始逗號形式的最小改動:引數保持不變,只是移除了分隔符。

使用範本字串進行字串插值在 Python 中列印中間沒有空格的值

Python 的 string.Template 類別將值插值到範本字串中:以 $ 開頭的佔位符會被取代為您提供的值,並且不會在其周圍新增任何內容:

from string import Template

x = 10
template = Template('The number of mangoes I have is "$x"')
result = template.substitute(x=x)
print(result)

輸出:

The number of mangoes I have is "10"

在這裡,$x 是 x 值的佔位符。呼叫 template.substitute(x=x) 會將其取代為 10,而 print(result) 會精確地輸出完成後的字串 — The number of mangoes I have is "10",不新增引號或空格。範本字串最常在範本本身來自使用者或檔案時使用,因為它們的取代規則刻意保持簡單。

結論

原始範例中的空格來自 print() 本身:對於逗號分隔的引數,它會插入 sep 分隔符,其預設為一個空格。您可以透過更改分隔符(sep="")、在列印前建構整個字串(使用 f 字串、str.format()、% 運算子、串接或 string.Template),或者結合這兩種思路來消除它們。對於日常程式碼,f 字串是最具可讀性的選擇,而當引數已經就位時,sep="" 是最快的修正方法。