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