在Python?3.0中,%操作符通過一個更強的格式化方法format()進行了增強。對str.format()的支持已經被反向移植到了Python?2.6在2.6中,8-bit字符串和Unicode字符串都有一個format()方法,這個方法會把字符串當作一個模版,通過傳入的參數進行格式化。這個用來格式化的模版使用大括號({,})作為特殊字符。#?Substitute?positional?argument?0?into?the?string."User?ID:?{0}".format("root")?->?"User?ID:?root"#?Use?the?named?keyword?arguments'User?ID:?{uid}?Last?seen:?{last_login}'.format(uid='root',last_login?=?'5?Mar?2008?07:20')?->'User?ID:?root?Last?seen:?5?Mar?2008?07:20'大括號可以寫兩遍來轉義。format("Empty?dict:?{{}}")?->?"Empty?dict:?{}"字段名字可以為整數,表示參數的位置。像{0},?{1}等。也可以是參數的名字。你以可以使用字段的組合來讀取屬性或者字典的key值。import?sys'Platform:?{0.platform}\nPython?version:?{0.version}'.format(sys)?->'Platform:?darwin\nPython?version:?2.6a1+?(trunk:61261M,?Mar?5?2008,?20:29:41)?\n[GCC?4.0.1?(Apple?Computer,?Inc.?build?5367)]'import?mimetypes'Content-type:?{0[.mp4]}'.format(mimetypes.types_map)?->'Content-type:?video/mp4'注意,當使用字典類型的表示方法,如[.mp4]時,你不需要引號將字符串(.mp4)引起來;它會查找用.mp4作為主鍵的值。以整數開頭的字符串會被轉換成一個整數。你不能在被格式化的字符串中寫復雜的表達式。到此,我們已經演示了怎樣替換指定的字段。我們還可以通過在格式化指示符后面添加一個冒號來進行精確格式化。例如:#?Field?0:?left?justify,?pad?to?15?characters#?Field?1:?right?justify,?pad?to?6?charactersfmt?=?'{0:15}?${1:>6}'fmt.format('Registration',?35)?->'Registration?$?35'fmt.format('Tutorial',?50)?->'Tutorial?$?50'fmt.format('Banquet',?125)?->'Banquet?$?125'格式化指示符可以通過嵌套進行引用。fmt?=?'{0:{1}}'width?=?15fmt.format('Invoice?#1234',?width)?->'Invoice?#1234?'width?=?35fmt.format('Invoice?#1234',?width)?->'Invoice?#1234?'可以指定所需長度的字符串的對齊方式。效果字符:?右對齊^?中間對齊=?(只用于數字)在小數點后進行補齊格式化指示符可以包含一個展示類型來控制格式。例如,浮點數可以被格式化為一般格式或用冪來表示。>>>?'{0:g}'.format(3.75)'3.75'>>>?'{0:e}'.format(3.75)'3.750000e+00'展示類型有很多。2.6的文檔里有完整的列表。這里列出一些示例。'b'?-?二進制。將數字以2為基數進行輸出。'c'?-?字符。在打印之前將整數轉換成對應的Unicode字符串。'd'?-?十進制整數。將數字以10為基數進行輸出。'o'?-?八進制。將數字以8為基數進行輸出。'x'?-?十六進制。將數字以16為基數進行輸出,9以上的位數用小寫字母。'e'?-?冪符號。用科學計數法打印數字。用'e'表示冪。'g'?-?一般格式。將數值以fixed-point格式輸出。當數值特別大的時候,用冪形式打印。'n'?-?數字。當值為整數時和'd'相同,值為浮點數時和'g'相同。不同的是它會根據區域設置插入數字分隔符。'%'?-?百分數。將數值乘以100然后以fixed-point('f')格式打印,值后面會有一個百分號。類和類型可以定義一個__format__()方法來控制怎樣格式化自己。它會接受一個格式化指示符作為參數:def?__format__(self,?format_spec):if?isinstance(format_spec,?unicode):return?unicode(str(self))else:return?str(self)還有一個內置的format()方法可以用來格式化一個值。它會調用類型的__format__()方法,并將格式化指示符作為參數傳進去。>>>?format(75.6564,?'.2f')'75.66'參考格式化字符串的語法?-?格式化字段的參考文檔PEP?3101?-?Advanced?String?FormattingPEP由Talin編寫,由Eric?Smith實現。