Python格式字符串

數字格式化


下面的表格展示了使用Python的後起新秀str.format()格式化數字的多種方法,包含浮點數格式化與整數格式化示例。可使用print("FORMAT".format(NUMBER)); 來運行示例,因此你可以運行: print("{:.2f}".format(3.1415926)); 來得到第一個示例的輸出。


數字 格式 輸出 描述

3.1415926 {:.2f} 3.14 保留小數點後兩位

3.1415926 {:+.2f} +3.14 帶符號保留小數點後兩位

-1 {:+.2f} -1.00 帶符號保留小數點後兩位

2.71828 {:.0f} 3 不帶小數

5 {:0>2d} 05 數字補零 (填充左邊, 寬度爲2)

5 {:x<4d} 5xxx 數字補x (填充右邊, 寬度爲4)

10 {:x<4d} 10xx 數字補x (填充右邊, 寬度爲4)

1000000 {:,} 1,000,000 以逗號分隔的數字格式

0.25 {:.2%} 25.00% 百分比格式

1000000000 {:.2e} 1.00e+09 指數記法

13 {:10d}        13 右對齊 (默認, 寬度爲10)

13 {:<10d} 13 左對齊 (寬度爲10)

13 {:^10d}    13 中間對齊 (寬度爲10)

string.format()基礎

如下是兩個基本字符串替換的示例,符號 {} 是替換變量的佔位符。若沒有指定格式,則直接將變量值作爲字符串插入。


s1 = "so much depends upon {}".format("a red wheel barrow") s2 = "glazed with {} water beside the {} chickens".format("rain", "white")

你也可以使用變量的位置數值,在字符串中改變它們,進行格式化時,會更加靈活。如果搞錯了順序,你可以輕易地修正而不需要打亂所有的變量。


s1 = " {0} is better than {1} ".format("emacs", "vim") s2 = " {1} is better than {0} ".format("emacs", "vim")

更老的格式字符串符號"%"

Python2.6之前,格式字符串的使用方法相對更簡單些,雖然其能夠接收的參數數量有限制。這些方法在Python3.3中仍然有效,但已有含蓄的警告稱將完全淘汰這些方法,目前還沒有明確的時間進度表。[PEP-3101]


格式化浮點數:


pi = 3.14159 print(" pi = %1.2f ", % pi)

多個替換值


s1 = "cats" s2 = "dogs" s3 = " %s and %s living together" % (s1, s2)

沒有足夠的參數


使用老的格式化方法,我經常犯錯"TypeError: not enough arguments for formating string",因爲我數錯了替換變量的數量,編寫如下這樣的代碼很容易漏掉變量。


set = (%s, %s, %s, %s, %s, %s, %s, %s) " % (a,b,c,d,e,f,g,h,i)

對於新的Python格式字符串,可以使用編號的參數,這樣你就不需要統計有多少個參數。


set = set = " ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}) ".format(a,b,c,d,e,f,g)

更多.format()的格式字符串方法

format()函數提供了相當多的附加特性和功能,如下是一些有用的使用.format()的技巧。


命名參數


你可以將新的格式字符串用作模板引擎,使用命名參數,這樣就不要求有嚴格的順序。


madlib = " I {verb} the {object} off the {place} ".format(verb="took", object="cheese", place="table") >>> I took the cheese off the table

多次複用同一個變量


使用% 格式字符串,要求變量有嚴格的次序,而.format()方法允許如上所示那樣任意排列參數,也允許複用。


str = "Oh {0}, {0}! wherefore art thou {0}?".format("Romeo") >>> Oh Romeo, Romeo! wherefore art thou Romeo?

將數值轉換爲不同的進制


可以使用如下字母來將數字轉換成字母代表的進制,decimal,hex,octal, binary。


print("{0:d} - {0:x} - {0:o} - {0:b} ".format(21)) >>> 21 - 15 - 25 -10101

將格式作爲函數來使用


可以將.format()用作函數,這就允許在代碼中將普通文本和格式區分開來。例如,你可以在程序的開頭包含所有需要使用的格式,然後在後面使用。這也是一種處理國際化的好方法,國際化不僅要求不同的文本,且常常要求不同的數字格式。


## 定義格式 email_f = "Your email address was {email}".format ### 在另一個地方使用 print(email_f(email="[email protected]"))

感謝 earthboundkid在reddit上提供這一技巧。


其他技巧

轉義大括號


使用str.format()時,若你需要使用大括號,只要寫兩次就可以了:


print(" The {} set is often represented as { {0} } ".format("empty")) >>> The empty set is often represented as {0}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章