我最早學(xué)習(xí)的是C++語言,對于C風(fēng)格的這種字符串格式化方式不熟悉于个,轉(zhuǎn)到Python之后覺得這種方式可以很方便地在字符串中插入變量镐作,于是去搜索了python的官方文檔,找到了一個關(guān)于字符串格式化的頁面呀酸。
這種格式化方法的使用方式是format % values
凉蜂,其中format是字符串,value就是要插入的值性誉。在format中窿吩,需要用值替換的位置用轉(zhuǎn)換說明符(conversion specifier)進(jìn)行占位,轉(zhuǎn)換說明符是一組以%開頭的字符错览,例如:
>>> age = 17
>>> string = "Tom is %s years old."
>>> print(string % age)
Tom is 17 years old.
在上例中纫雁,%s
即轉(zhuǎn)換說明符,s
表示將value轉(zhuǎn)換成字符串類型倾哺,python會在內(nèi)部調(diào)用str(age)
轧邪,并把返回的字符串"17"
插入到原來%s
所在的位置。當(dāng)然悼粮,對于上例中value是數(shù)值的情況闲勺,也可以使用整型類型說明符d
或i
,二者效果相同:
>>> print("Tom is %d years old." % age)
Tom is 17 years old.
>>> print("Tom is %i years old." % age)
Tom is 17 years old.
如果format只需要一個參數(shù)扣猫,就像上例中的那樣菜循,那么后面的value必須是一個非元組對象(non-tuple object)。如果format需要多個參數(shù)申尤,value就得是一個含有恰好滿足format參數(shù)數(shù)量個元素的元組:
>>> age2 = 16
>>> print("Tom is %s years old \
while his brother Bob is %s years old." % (age, age2))
Tom is 17 years old while his brother Bob is 16 years old.
使用字典作為value也是可以的癌幕,這種方法必須在format中寫明字典的鍵,并用括號括起來:
>>> print("Tom is %(Tom)s years old \
while his brother Bob is %(Bob)s years old." % {'Tom': age, 'Bob': age2})
Tom is 17 years old while his brother Bob is 16 years old.
format中的轉(zhuǎn)換說明符一共由7部分構(gòu)成昧穿,按照排列順序依次是:
"%" 映射鍵 轉(zhuǎn)換標(biāo)記 最小字段寬度 精度 長度限定 轉(zhuǎn)換類型
其中僅有起始的百分號%和末尾的轉(zhuǎn)換類型是必須的勺远,中間的5個部分都是可選參數(shù)。映射鍵需要使用小括號括起來时鸵,如上例中的字典鍵胶逢。
轉(zhuǎn)換標(biāo)記有以下幾種:
轉(zhuǎn)換標(biāo)記 | 說明 |
---|---|
# | 轉(zhuǎn)換將會使用下方定義的替代形式 |
0 | 對于數(shù)值形式的轉(zhuǎn)換,用 "0" 補(bǔ)齊空位 |
- | 居左 (如果與 "0" 同時出現(xiàn)饰潜,將會覆蓋 "0"). |
(空格) 轉(zhuǎn)換有符號的值時初坠,在正數(shù)前加上一個空格 | |
+ | 轉(zhuǎn)換有符號的值時,在正數(shù)前加上 "+" (會覆蓋空格標(biāo)記) |
這些符號常和精度一起使用彭雾,精度既可以指定整數(shù)也可以指定小數(shù)碟刺,指定小數(shù)時需要加上小數(shù)點"."
:
>>> print("Tom is %3d years old." % age) # 整數(shù)占三位
Tom is 17 years old.
>>> print("Tom is % d years old." % age) # 加空格
Tom is 17 years old.
>>> print("Tom is %03d years old." % age) # 用0補(bǔ)齊空位
Tom is 017 years old.
>>> print("Tom is %-3d years old." % age) # 居左
Tom is 17 years old.
>>> print("Tom is %+d years old." % age) # 添加+號
Tom is +17 years old.
>>> print("Tom is %+.2f years old." % age) # 指定小數(shù)位數(shù)
Tom is +17.00 years old.
轉(zhuǎn)換類型如下表所示:
轉(zhuǎn)換類型 | 說明 |
---|---|
d | 十進(jìn)制有符號整型 |
i | 十進(jìn)制有符號整型 |
o | 無符號八進(jìn)制 |
u | 無符號十進(jìn)制 |
x | 無符號十六進(jìn)制(小寫) |
X | 無符號十六進(jìn)制(大寫) |
e | 浮點指數(shù)格式(小寫) |
E | 浮點指數(shù)格式(大寫) |
f | 十進(jìn)制浮點格式 |
F | 十進(jìn)制浮點格式 |
g | 若指數(shù)大于-4或小于精度則于"e"相同,其他情況為"f" |
G | 若指數(shù)大于-4或小于精度則于"E"相同薯酝,其他情況為"F" |
c | 單字符(接受整型或單字符的字符串類型) |
r | 字符串(使用repr()轉(zhuǎn)換python對象) |
s | 字符串(使用str()轉(zhuǎn)換python對象) |