字符串的輸出格式可以由下面的語(yǔ)法進(jìn)行控制:
%[(name)][flag][width][.][precision]type
這套格式化字符串的方法被很多編程語(yǔ)言沿用,包括c
,cpp
,java
,python
等,所以,我們明白了這一套的話,在別的語(yǔ)言里同樣也可以用,所以學(xué)一下這套語(yǔ)法還是很有用處的.
上面被[]
括住的項(xiàng)表示該項(xiàng)是可選的.
其中,(name)
表示命名,這個(gè)其實(shí)用得不多.這也是python
對(duì)這套語(yǔ)法的擴(kuò)展,別的語(yǔ)言里沒有這一套.這里僅僅舉一個(gè)栗子,說明一下,即使沒有這一項(xiàng),也沒有多大的影響,這一項(xiàng)可以通過別的格式化操作實(shí)現(xiàn),所以這玩意只是一個(gè)語(yǔ)法糖而已,覺得麻煩的話,丟掉就好了:
print("I'm %(name)s. I'm %(age)d year old" % {'name':'Vamei', 'age':99})
結(jié)果如下:
I'm Vamei. I'm 99 year old
flag
為標(biāo)記格式限定符號(hào),包含+``-``#
和0
,+
表示右對(duì)齊(會(huì)顯示正負(fù)號(hào)),-
表示左對(duì)齊,前面默認(rèn)為填充空格(即默認(rèn)右對(duì)齊),0
表示填充0
胰默,#
表示八進(jìn)制時(shí)前面補(bǔ)充0
,16
進(jìn)制數(shù)填充0x
,二進(jìn)制填充0b
.
width
用于表示寬度或者說最短長(zhǎng)度,一個(gè)字符占據(jù)一個(gè)寬度,包含小數(shù)點(diǎn),當(dāng)要輸出的內(nèi)容對(duì)應(yīng)的字符數(shù)小于width
時(shí)會(huì)按照前面flag
的指示來(lái)進(jìn)行填充,如果flag
為空,那么用空格填充.
precision
一般只對(duì)小數(shù)有效,控制輸出在小數(shù)點(diǎn)之后的位數(shù).
type
表示類型碼,具體如下表所示:
類型碼 | 說明 |
---|---|
%s |
字符串 (采用str() 的顯示) |
%r |
字符串 (采用repr() 的顯示) |
%c |
單個(gè)字符 |
%b |
二進(jìn)制整數(shù) |
%d | 有符號(hào)十進(jìn)制整數(shù) |
%i |
有符號(hào)十進(jìn)制整數(shù) |
%o | 無(wú)符號(hào)八進(jìn)制整數(shù) |
** %x ** | 輸出使用小寫字母a~f,表示無(wú)符號(hào)十六進(jìn)制整數(shù) |
%X | 輸出使用大寫字母A~F,表示無(wú)符號(hào)十六進(jìn)制整數(shù) |
%e |
指數(shù) (基底寫為e ) |
%E |
指數(shù) (基底寫為E ) |
%f |
浮點(diǎn)數(shù) |
%F |
浮點(diǎn)數(shù),與上相同 |
%g |
指數(shù)(e )或浮點(diǎn)數(shù) (根據(jù)顯示長(zhǎng)度) |
%G |
指數(shù)(E )或浮點(diǎn)數(shù) (根據(jù)顯示長(zhǎng)度) |
%u | 無(wú)符號(hào)十進(jìn)制整數(shù) |
這套語(yǔ)法其實(shí)是一個(gè)非常小的DSL
,很有意思,有興趣的同學(xué)可以練習(xí)一下,自上而下分析設(shè)定,做一個(gè)小型的parser
.
補(bǔ)充
一些不常用,但是很有用的東西.
類型碼 | 說明 |
---|---|
hh | 和整數(shù)類型碼一起使用,表示一個(gè)signed char或者unsigned char(8bit),常用有%hhx表示用16進(jìn)制輸出一個(gè)1字節(jié)的unsigned char類型 |
ll | 和整數(shù)類型碼一起使用,表示一個(gè)long long int或者unsigned long long int類型,比如%llx表示用16進(jìn)制輸出一個(gè)4字節(jié)的unsigned long long int類型 |