Python中的字符串格式化

引子

眾所周知,我們可以使用 print() 方法來輸出一個固定內(nèi)容的字符串,就像是 print("Hello, world!") 一樣。但是,在現(xiàn)實(shí)中,我們很多時候是需要輸出一些內(nèi)容不斷變化,或者內(nèi)容動態(tài)生成的字符串,例如,我們不再輸出 "Hello, world!",而是輸出 "Hello, Mike!" 或者 "Hello, Tom!"。

這個時候我們該怎么做呢?

本文將介紹如何按照需要,在Python中格式化一個字符串。

“string.format()”方法

在Python中,有幾種格式化字符串的方法,包括 % 格式化方法、str.format() 方法和最近在Python 3.6中引入的 f-strings 方法(也稱為格式化字符串字面量)。每種方法都有其自己的優(yōu)點(diǎn)和缺點(diǎn),但它們都可以用于格式化字符串。

在Python 3.6版本之前,我們推薦使用 str.format() 方法格式化字符串。該方法通過將字符串中的占位符替換為值來格式化字符串。該方法具有多個可選參數(shù),允許開發(fā)人員自定義輸出的格式。

str.format() 方法的基本語法為:

string.format(value1, value2, ...)

其中,string 是我們要格式化的字符串,value1、value2 等是要替換到字符串中的占位符的值。

字符串中的占位符由成對的大括號 {} 表示。在大括號內(nèi)部,我們可以使用格式說明符來控制被替換的值的格式。

以下是一些常用的格式說明符:

  • {}

    這是最簡單的格式說明符,它只是原樣替換值。

  • {:<N}

    這個說明符將值左對齊,并在右側(cè)填充空格,以達(dá)到總寬度N。

  • {:>N}

    這個說明符將值右對齊,并在左側(cè)填充空格,以達(dá)到總寬度N。

  • {:^N}

    這個說明符將值居中,并在兩側(cè)填充空格,以達(dá)到總寬度N。

  • {:.Nf}

    這個說明符將浮點(diǎn)數(shù)格式化為N位小數(shù)。

  • {:.Ng}

    這個說明符將數(shù)字格式化為N位有效數(shù)字。

  • {:.N%}

    這個說明符將浮點(diǎn)數(shù)格式化為帶有N位小數(shù)的百分比。

除了這些格式說明符外,str.format()方法還支持許多其他參數(shù):

  • sep

    指定在連接多個值時要使用的分隔符字符。

  • end

    指定要附加到輸出結(jié)尾的字符串。

  • file

    指定要將輸出寫入的文件對象。

  • flush

    指定在寫入輸出后是否刷新輸出緩沖區(qū)。

下面,我們來看幾個使用 str.format() 方法格式化字符串的例子:

>>> name = "Alice"
>>> age = 30
>>> print("My name is {} and I am {} years old.".format(name, age))
My name is Alice and I am 30 years old.

你也可以通過給參數(shù)命名來替換占位符,例如:

>>> print("My name is {name} and I am {age} years old.".format(name=name, age=age))
My name is Alice and I am 30 years old.

你還可以重復(fù)使用相同的參數(shù),例如:

>>> print("My name is {name} and I am {age} years old. I repeated my name {name}".format(name=name, age=age))
My name is Alice and I am 30 years old. I repeated my name Alice

我們還是可以嘗試使用更復(fù)雜一點(diǎn)的參數(shù),例如:

>>> x = 12345.6789
>>> y = 98765.4321
>>> message = "x = {:.2f}, y = {:.2f}".format(x, y)
>>> print(message)
x = 12345.68, y = 98765.43

在這個示例中,我們使用 str.format() 方法來格式化兩個浮點(diǎn)數(shù) xy。我們使用 :.2f 格式說明符,將數(shù)字格式化為兩位小數(shù)。

一般來說,在Python 3.6版本之前,我們都推薦使用 string.format() 方法來格式化字符串。

“f-string”語法

在Python 3.6及更高版本中,Python提供了一種稱為 f-string (也叫 f-stringsf-interpolation) 的新語法,可以更簡單地格式化字符串。

f-string 的語法是通過在字符串前面加上一個前綴 fF,然后在字符串中插入表達(dá)式的方式來格式化字符串。表達(dá)式需要用大括號 {} 括起來。

例如,你可以使用以下代碼格式化字符串:

>>> name = "Alice"
>>> age = 30
>>> print(f"My name is {name} and I am {age} years old.")
My name is Alice and I am 30 years old.

你還可以在表達(dá)式中調(diào)用函數(shù)或運(yùn)算符,例如:

>>> import math
>>> print(f"2*2={2*2}, pi={math.pi}")
2*2=4, pi=3.141592653589793

也可以通過在表達(dá)式的后面添加一個冒號和格式說明符來格式化輸出,例如,你可以使用以下語法來保留小數(shù)點(diǎn)后兩位:

>>> print(f"The value of pi is approximately {math.pi:.2f}.")
The value of pi is approximately 3.14.

你還可以使用冒號和格式說明符來指定字符串的對齊方式、寬度和其他格式選項(xiàng)。

例如,你可以使用以下語法來左對齊一個字符串,并在右側(cè)填充空格以達(dá)到指定寬度:

>>> name = 'Alice'
>>> print(f"{name:<10}")
Alice    

str.format() 方法類似,f-string 方法也可以使用若干格式說明符來指定格式:

  • :d:i 轉(zhuǎn)換為有符號十進(jìn)制整數(shù);
  • :o 轉(zhuǎn)換為無符號八進(jìn)制整數(shù);
  • :x, :X 轉(zhuǎn)換為無符號十六進(jìn)制整數(shù),x 表示小寫,X 表示大寫;
  • :e, :E 轉(zhuǎn)換為科學(xué)計數(shù)法,e 表示小寫,E 表示大寫;
  • :f, :F 轉(zhuǎn)換為十進(jìn)制浮點(diǎn)數(shù),f 表示小寫,F 表示大寫;
  • :g, :G 轉(zhuǎn)換為十進(jìn)制浮點(diǎn)數(shù),盡量使用科學(xué)計數(shù)法,g表示小寫,G 表示大寫;
  • :% 轉(zhuǎn)換為百分?jǐn)?shù);
  • :c 轉(zhuǎn)換為字符;
  • :s 轉(zhuǎn)換為字符串;

如果你需要在字符串中插入大括號,可以使用雙大括號 {{}},這樣Python就會將它們當(dāng)作普通字符而不是占位符:

>>> print(f"{{name}} is a placeholder")
{name} is a placeholder

你還可以使用 f-string 格式化字典對象:

>>> person = {'name': 'Alice', 'age': 30}
>>> print(f"My name is {person['name']} and I am {person['age']} years old.")
My name is Alice and I am 30 years old.

目前,f-string 是Python中最簡單,最快,也是最常用的字符串格式化方式,我們推薦開發(fā)人員在Python 3.6及以上版本中使用。

總結(jié)

在Python開發(fā)中,格式化字符串是一種重要的技術(shù),可以用于動態(tài)創(chuàng)建包含變量、表達(dá)式和其他數(shù)據(jù)的字符串。它允許開發(fā)人員通過將字符串的某些部分替換為變量、表達(dá)式或其他字符串的值來構(gòu)造復(fù)雜的字符串。

在Python中,目前有三種主要的格式化字符串方法,包括 % 格式化方法、str.format() 方法和 f-strings 方法。我們推薦開發(fā)人員在Python 3.6及以上版本中使用 f-string 方法來格式化字符串。

學(xué)習(xí)Python基礎(chǔ),請瀏覽《百例講透Python基礎(chǔ)》。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容