字符串 format() 方法將給定的字符串格式化為 Python 中更好的輸出。
用法:
template.format(p0, p1, ..., k0=v0, k1=v1, ...)
這裏,p0, p1,...
是位置參數,k0, k1,...
是關鍵字參數,其值分別為 v0, v1,...
。
而且,template
是格式代碼與參數占位符的混合。
參數:
format()
方法采用任意數量的參數。但是,分為兩類參數:
- 位置參數- 可以通過花括號內的參數索引訪問的參數列表
{index}
- 關鍵字參數- key=value 類型的參數列表,可以使用花括號內的參數鍵訪問
{key}
返回:
format()
方法返回格式化的字符串。
字符串 format() 如何工作?
format()
讀取傳遞給它的參數類型,並根據字符串中定義的格式代碼對其進行格式化。
對於位置參數
這裏,參數 0 是字符串 "Adam",參數 1 是浮點數 230.2346。
注意:Python 中的參數列表從 0 開始。
字符串"Hello {0}, your balance is {1:9.3f}"
是模板字符串。這包含用於格式化的格式代碼。
花括號隻是要放置的參數的占位符。在上麵的示例中,{0}
是 "Adam"
的占位符,而 {1:9.3f}
是 230.2346
的占位符。
由於模板字符串將 format()
參數表示為 {0}
和 {1}
,因此參數是位置參數。它們都可以在沒有數字的情況下引用,因為 {}
並且 Python 在內部將它們轉換為數字。
在內部,
- 自從
"Adam"
是 0th論點,它被放置在{0}
.自從,{0}
不包含任何其他格式代碼,它不執行任何其他操作。 - 但是,情況並非如此 1st參數
230.2346
.這裏,{1:9.3f}
地方230.2346
在其位置並執行操作 9.3f。 - f 指定處理浮點數的格式。如果沒有正確指定,它將給出一個錯誤。
- "." (9) 之前的部分指定數字 (230.2346) 可以采用的最小寬度/填充。在這種情況下,230.2346 至少分配了 9 個位置,包括 "."。
如果未指定對齊選項,則將其對齊到剩餘空格的右側。 (對於字符串,它左對齊。) - "." (3) 之後的部分將小數部分 (2346) 截斷為給定的數字。在這種情況下,2346 在 3 個位置後被截斷。
剩餘數字 (46) 四舍五入輸出 235。
對於關鍵字參數
我們使用上麵的相同示例來顯示關鍵字和位置參數之間的區別。
在這裏,我們不僅使用了參數,還使用了參數的鍵值對。即 name="Adam"
和 blc=230.2346
。
由於這些參數被它們的鍵引用為 {name}
和 {blc:9.3f}
,因此它們被稱為關鍵字或命名參數。
在內部,
- 占位符
{name}
被名稱的值替換 - "Adam"。由於它不包含任何其他格式代碼,因此放置了"Adam"。 - 對於參數 blc=230.2346,占位符
{blc:9.3f}
替換為值 230.2346。但是在替換它之前,像前麵的例子一樣,它對其執行 9.3f 操作。
這輸出 230.235。小數部分在 3 位後被截斷,其餘數字四舍五入。同樣,總寬度被分配為 9,在左側留下兩個空格。
format() 的基本格式設置
format()
方法允許使用簡單的占位符進行格式化。
示例 1:默認、位置和關鍵字參數的基本格式
# default arguments
print("Hello {}, your balance is {}.".format("Adam", 230.2346))
# positional arguments
print("Hello {0}, your balance is {1}.".format("Adam", 230.2346))
# keyword arguments
print("Hello {name}, your balance is {blc}.".format(name="Adam", blc=230.2346))
# mixed arguments
print("Hello {0}, your balance is {blc}.".format("Adam", blc=230.2346))
輸出
Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346. Hello Adam, your balance is 230.2346.
注意:在混合參數的情況下,關鍵字參數必須始終跟隨位置參數。
使用format() 格式化數字
您可以使用下麵給出的格式說明符來格式化數字:
類型 | 意義 |
---|---|
d | 十進製整數 |
c | 對應的 Unicode 字符 |
b | 二進製格式 |
o | 八進製格式 |
x | 十六進製格式(小寫) |
X | 十六進製格式(大寫) |
n | 與'd' 相同。除了它使用當前區域設置作為數字分隔符 |
e | index 符號。 (小寫字母 e) |
E | index 符號(大寫 E) |
f | 顯示定點編號(默認值:6) |
F | 與'f' 相同。除了將 'inf' 顯示為 'INF' 和 'nan' 顯示為 'NAN' |
g | 一般格式。將數字四舍五入為 p 個有效數字。 (默認精度:6) |
G | 與'g' 相同。如果數量很大,則切換到 'E' 除外。 |
% | 百分比。乘以 100 並將 % 放在末尾。 |
示例 2:簡單的數字格式
# integer arguments
print("The number is:{:d}".format(123))
# float arguments
print("The float number is:{:f}".format(123.4567898))
# octal, binary and hexadecimal format
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12))
輸出
The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c
示例 3:使用 int 和 float 填充的數字格式
# integer numbers with minimum width
print("{:5d}".format(12))
# width doesn't work for numbers longer than padding
print("{:2d}".format(1234))
# padding for float numbers
print("{:8.3f}".format(12.2346))
# integer numbers with minimum width filled with zeros
print("{:05d}".format(12))
# padding for float numbers filled with zeros
print("{:08.3f}".format(12.2346))
輸出
12 1234 12.235 00012 0012.235
這裏,
- 在第一條語句中,
{:5d}
采用整數參數並指定最小寬度為 5。由於未指定對齊方式,因此它向右對齊。 - 在第二個語句中,您可以看到寬度 (2) 小於數字 (1234),因此它不會向左占用任何空間,但也不會截斷數字。
- 與整數不同,浮點數同時具有整數和小數部分。並且,定義為數字的最小寬度適用於整個兩個部分,包括".".
- 在第三個語句中,
{:8.3f}
將小數部分截斷為 3 位,將最後 2 位四舍五入。而且,這個數字現在是 12.235,整體寬度為 8,向左留出 2 個位置。 - 如果您想用零填充剩餘的位置,請在格式說明符之前放置一個零。它適用於整數和浮點數:
{:05d}
和{:08.3f}
。
示例 4:有符號數字的數字格式
# show the + sign
print("{:+f} {:+f}".format(12.23, -12.23))
# show the - sign only
print("{:-f} {:-f}".format(12.23, -12.23))
# show space for + sign
print("{: f} {: f}".format(12.23, -12.23))
輸出
+12.230000 -12.230000 12.230000 -12.230000 12.230000 -12.230000
帶對齊的數字格式
運算符<, ^, > and =
在為數字分配一定寬度時用於對齊。
類型 | 意義 |
---|---|
< | 與剩餘空間左對齊 |
^ | 中心對齊到剩餘空間 |
> | 與剩餘空間右對齊 |
= | 強製帶符號 (+) (-) 到最左邊的位置 |
示例 5:具有左對齊、右對齊和居中對齊的數字格式
# integer numbers with right alignment
print("{:5d}".format(12))
# float numbers with center alignment
print("{:^10.3f}".format(12.2346))
# integer left alignment filled with zeros
print("{:<05d}".format(12))
# float numbers with center alignment
print("{:=8.3f}".format(-12.2346))
輸出
12 12.235 12000 - 12.235
注意:用零填充整數的左對齊可能會導致問題,如第三個示例,它返回 12000,而不是 12。
使用format() 格式化字符串
作為數字,可以使用與 format()
類似的方式格式化字符串。
示例 6:使用填充和對齊的字符串格式化
# string padding with left alignment
print("{:5}".format("cat"))
# string padding with right alignment
print("{:>5}".format("cat"))
# string padding with center alignment
print("{:^5}".format("cat"))
# string padding with center alignment
# and '*' padding character
print("{:*^5}".format("cat"))
輸出
cat cat cat *cat*
示例 7:使用 format() 截斷字符串
# truncating strings to 3 letters
print("{:.3}".format("caterpillar"))
# truncating strings to 3 letters
# and padding
print("{:5.3}".format("caterpillar"))
# truncating strings to 3 letters,
# padding and center alignment
print("{:^5.3}".format("caterpillar"))
輸出
cat cat cat
使用 format() 格式化類和字典成員
Python 在內部使用 getattr()
作為類成員,格式為 ".age"。並且,它使用__getitem__()
查找字典成員,格式為"[index]"。
示例 8:使用 format() 格式化類成員
# define Person class
class Person:
age = 23
name = "Adam"
# format age
print("{p.name}'s age is: {p.age}".format(p=Person()))
輸出
Adam's age is: 23
在這裏,Person
對象作為關鍵字參數 p
傳遞。
在模板字符串中,Person 的 name
和 age
分別使用 .name
和 .age
訪問。
示例 9:使用 format() 格式化字典成員
# define Person dictionary
person = {'age': 23, 'name': 'Adam'}
# format age
print("{p[name]}'s age is: {p[age]}".format(p=person))
輸出
Adam's age is: 23
與類類似,person
字典作為關鍵字參數 p
傳遞。
在模板字符串中,人員的name
和age
分別使用[name]
和[age]
訪問。
使用 str.format(**mapping)
在 Python 中格式化字典有一種更簡單的方法。
# define Person dictionary
person = {'age': 23, 'name': 'Adam'}
# format age
print("{name}'s age is: {age}".format(**person))
**
是格式參數(最小字段寬度)。
使用 format() 將參數作為格式代碼
您還可以動態傳遞格式代碼,如精度、對齊、填充字符作為位置或關鍵字參數。
示例 10:使用 format() 進行動態格式化
# dynamic string format template
string = "{:{fill}{align}{width}}"
# passing format codes as arguments
print(string.format('cat', fill='*', align='^', width=5))
# dynamic float format template
num = "{:{align}{width}.{precision}f}"
# passing format codes as arguments
print(num.format(123.236, align='<', width=8, precision=2))
輸出
*cat* 123.24
這裏,
- 在第一個示例中,'cat' 是要格式化的位置參數。同樣,
fill='*'
,align='^'
和width=5
是關鍵字參數。 - 在模板字符串中,這些關鍵字參數不是作為要打印的普通字符串檢索的,而是作為實際的格式代碼檢索的
fill, align and width
.
參數替換了相應的命名占位符,並且字符串'cat' 被相應地格式化。 - 同樣,在第二個示例中,123.236 是位置參數,對齊、寬度和精度作為格式代碼傳遞給模板字符串。
format() 的額外格式化選項
format()
還支持 type-specific 格式選項,例如日期時間和複數格式。
format()
內部調用 __format__()
獲取日期時間,而 format()
訪問複數的屬性。
您可以輕鬆地覆蓋任何對象的__format__()
方法以進行自定義格式設置。
示例 11:使用 format() 格式化 Type-specific 並覆蓋 __format__() 方法
import datetime
# datetime formatting
date = datetime.datetime.now()
print("It's now: {:%Y/%m/%d %H:%M:%S}".format(date))
# complex number formatting
complexNumber = 1+2j
print("Real part: {0.real} and Imaginary part: {0.imag}".format(complexNumber))
# custom __format__() method
class Person:
def __format__(self, format):
if(format == 'age'):
return '23'
return 'None'
print("Adam's age is: {:age}".format(Person()))
輸出
It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23
這裏,
- 對於日期時間:
當前日期時間作為位置參數傳遞給format()
方法。
並且,內部使用__format__()
方法,format()
訪問年、月、日、小時、分鍾和秒。 - 對於複數:
1+2j 在內部轉換為 ComplexNumber 對象。
然後訪問它的屬性real
和imag
,數字被格式化。 - 覆蓋__format__():
像日期時間一樣,您可以覆蓋自己的__format__()
自定義格式的方法,在訪問時返回年齡{:age}
您還可以使用帶有速記符號的對象的 __str__()
和 __repr__()
函數使用 format()
。
像 __format__()
一樣,您可以輕鬆地覆蓋對象的 __str__()
和 __repr_()
方法。
示例 12:__str()__ 和 __repr()__ 簡寫 !r 和 !s 使用 format()
# __str__() and __repr__() shorthand !r and !s
print("Quotes: {0!r}, Without Quotes: {0!s}".format("cat"))
# __str__() and __repr__() implementation for class
class Person:
def __str__(self):
return "STR"
def __repr__(self):
return "REPR"
print("repr: {p!r}, str: {p!s}".format(p=Person()))
輸出
Quotes: 'cat', Without Quotes: cat repr: REPR, str: STR
相關用法
- Python String format()用法及代碼示例
- Python String format_map()用法及代碼示例
- Python String find()用法及代碼示例
- Python String Center()用法及代碼示例
- Python String decode()用法及代碼示例
- Python String join()用法及代碼示例
- Python String casefold()用法及代碼示例
- Python String isalnum()用法及代碼示例
- Python String rsplit()用法及代碼示例
- Python String startswith()用法及代碼示例
- Python String rpartition()用法及代碼示例
- Python String splitlines()用法及代碼示例
- Python String upper()用法及代碼示例
- Python String isprintable()用法及代碼示例
- Python String translate()用法及代碼示例
- Python String title()用法及代碼示例
- Python String replace()用法及代碼示例
- Python String split()用法及代碼示例
- Python String zfill()用法及代碼示例
- Python String max()用法及代碼示例
注:本文由純淨天空篩選整理自 Python String format()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。