我們經常會輸出類似“你好,XXX,你這個月的工資時XXX元!”的字符串,其中,“XXX”的內容是根據變量變化的的,因此,需要一種簡便的格式化字符串的方式。
字符串格式化的操作有兩種方式:使用符號%
進行格式化、使用format()
方法進行格式化。下面就來詳細介紹一下這兩種格式化。
使用符號“%”進行格式化
在Python中使用符號“%”進行格式化的形式與C語言類似,其一般形式為:
“%[標志][0][輸出最小寬度][.精度]格式字符”%變量
。
其中,方括號[]中的項為可選項,也可以表示為:
“%[±][0][m][.n]格式字符”%變量
格式化各項的意義
- 標志
標志字符為”+“或者”-“,指定輸出數據的對齊方式:指定”+“時,輸出右對齊;指定”-“時,輸出左對齊;不指定標志時缺省為”+“,默認右對齊。
- ”0“
0 | 顯示的數字前面填充'0'而不是默認的空格 |
---|
- 輸出最小寬度
用十進制整數m表示輸出的最小位數。若實際位數大於定義的寬度,則按實際位數輸出;若實際位數小於定義的寬度,則補空格或0(如在m前有數字0,則補0)。
- 精度
精度格式符以”.“開頭,后跟十進制整數n。意義是:如果輸出數字,則表示小數的位數;如果輸出字符,則表示輸出字符的個數;若實際位數大於所定義的精度數,則截去超過的部分。
- 格式字符
格式字符用來表示輸出數據的類型,各種格式字符及其功能說明如下:
格式字符 | 功能說明 | 格式字符 | 功能說明 |
---|---|---|---|
%s | 字符串(采用str()顯示) | %o | 八進制整數 |
%r | 字符串(采用repr()顯示) | %x | 十六進制整數 |
%c | 單個字符 | %f,%F | 浮點數 |
%% | 字符% | %e,%E | 指數(基底為e或E) |
%d,%i | 十進制整數 | %g,%G | 以%f或%e中較短的輸出寬度輸出浮點數 |
注意:%s和%r的主要區別在於%r可供編輯器使用和識別,而%s不能。
a = 15
b = 12345678.1234567
strs = "I love Python!"
print("a=%05d"%a) # 使用m控制輸出位數為5的十進制整數,空位補0
print("b=%8.3f"%b) # 輸出b,用m,n分別控制輸出的長度為8,小數點位數為3的浮點數
print("%17s"%strs) # 使用m控制輸出字符串長度為17
print("%17r"%strs) # 使用%r輸出字符串
print("%-17.5s"%strs) # 使用m,n進行左對齊、限制字符串長度為17和字符位數為5
輸出結果為:
a=00015
b=12345678.123
I love Python!
'I love Python!'
I lov[_*12]
注意:[ _*12]代表的是輸出12個空格,這里由於不便於直觀表述,故用此方法讓大家理解。
使用format()方法進行格式化
使用format()方法也可以格式化字符串,其基本格式為:
模板字符串.format(逗號分隔的參數)
1、模板字符串是由一系列槽(用大括號表示)組成,用來控制字符串中嵌入值出現的位置,其基本思想是將format()方法中逗號分隔的參數按照序號替換到模板字符串的槽中(序號從0開始編號)。例如:
>>>"你好,{1},你這個月的工資是{0}元!".format(8500,張三)
'你好,張三,你這個月的工資是8500元!'
tips:{0}表示format括號里的第一個元素,{1}表示format括號里的第二個元素,依此類推。
2、如果大括號中沒有序號,則按照出現順序替換,例如:
>>>"你好,{},你這個月的工資是{}元!".format(8500,張三)
'你好,8500,你這個月的工資是張三元!'
3、format()方法中模板字符串的槽除了包括參數序號外,還可以包括格式控制信息,此時槽的內部樣式為:
{參數序號:格式控制標記}
其中格式控制標記用於控制參數顯示時的格式,下表列出了可用的格式控制標記及其意義:
填充 | 對齊 | 寬度 | , | .精度 | 格式字符 |
---|---|---|---|---|---|
用於填充的單個字符 | <左對齊 >右對齊 ^居中對齊 | 輸出寬度 | 數字的千位分隔符 | 浮點數小數部分精度或字符串最大輸出長度 | 整數類型d,o,x,X,b,c 浮點數類型e,E,f,% |
tips:格式控制標記包括”填充"、“對齊”、“寬度”、“,”、“.精度”、”格式字符"6個可選字段,這些字段可以組合使用。
a=15
b=12345678.1234567
strs="I love Python!"
print("a={0:05}".format(a)) # 輸出5位數字,空位補0(第一個0代表format括號內的第一個參數)
print("b={0:,.3f}".format(b)) # 輸出b,用千分位分隔並保留3位小數
print("{0:*^30}".format(strs)) # 居中且使用*填充,輸出長度為30
結果為:
a=00015
b=12,345,678.123
********I love Python!********