源自於 http://youngsterxyf.github.io/2013/01/26/python-string-format/
By youngsterxyf
譯者:youngsterxyf
每次使用Python的格式字串(string formatter),2.7及以上版本的,我都會犯錯,並且有生之年,我想我都理解不了它們的文檔。我非常習慣於更老的% 方法。所以著手編寫自己的格式字串手冊。若你有一些其他好的示例請告知我。
格式字串手冊
數位格式化
下面的表格展示了使用Python的後起新秀str.format()格式化數位的多種方法,包含浮點數格式化與整數格式化示例。可使用 print("FORMAT".format(NUMBER));來運行示例,因此你可以運行: print("{:.2f }".format(3.1415926)); 來得到第一個示例的輸出。
數字
|
格式
|
輸出
|
描述
|
3.1415926
|
{:
|
3.14
|
保留小數點後兩位
|
3.1415926
|
{:+
|
+3.14
|
帶符號保留小數點後兩位元
|
-1
|
{:+
|
-1.00
|
帶符號保留小數點後兩位元
|
2.71828
|
{:
|
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="bob@example.com"))
感謝 earthboundkid在reddit上提供這一技巧。
其他技巧
轉義大括弧
使用str.format()時,若你需要使用大括弧,只要寫兩次就可以了:
print(" The {} set
is often represented as { {0} } ".format("empty"))
>>> The empty set
is often represented as {0}
參考資料
Python String Library -
標準庫文檔
沒有留言:
張貼留言