在Python3.6.5版本測試通過 語法 str.format(*args, **kwargs) 它通過{}和:來代替%。 "映射”示例: 1.通過位置 In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.form ...
在Python3.6.5版本測試通過
語法 str.format(*args, **kwargs)
它通過{}和:來代替%。
"映射”示例:1.通過位置
In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.format('kzc',18) Out[2]: 'kzc,18' In [3]: '{1},{0},{1}'.format('kzc',18) Out[3]: '18,kzc,18'
2.通過關鍵字參數
In[5]:'{name},{age}'.format(age=18,name='kzc') Out[5]: 'kzc,18'
或字典方式
In [9]: dic={'name':'ytjoh','age':48} ...: '{name},{age}'.format(**dic) Out[9]: 'ytjoh,48'
list和tuple可以通過“打散”成普通參數給函數(使用*),而dict可以打散成關鍵字參數給函數(**)。所以可以輕鬆的傳個list/tuple/dict給format函數。
3.通過對象屬性
In [28]: class Person: ...: def __init__(self,name,age): ...: self.name,self.age = name,age ...: def __str__(self): ...: return 'This guy is {self.name},is {self.age} old'.format(self=self) In [29]: str(Person('ytjoh',48)) Out[29]: 'This guy is ytjoh,is 48 old'
4.通過下標
In [30]: p=['ytjoh',48] ...: '{0[0]},{0[1]}'.format(p) Out[30]: 'ytjoh,48'
In [40]: dic={'name':'ytjoh','age':48} ...: '{d[name]},{d[age]}'.format(d=dic) Out[40]: 'ytjoh,48'
5.
用%s和%r替換
In [35]: "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2') Out[35]: "repr() shows quotes: 'test1'; str() doesn't: test2"
格式限定符(format_spec) 它有著豐富的的“格式限定符”(語法是{}中帶:號),比如: 填充與對齊 填充常跟對齊一起使用 ^、<、>分別是居中、左對齊、右對齊,後面帶寬度 :號後面帶填充的字元,只能是一個字元,不指定的話預設是用空格填充 比如
In [31]: '{:>8}'.format('ytjoh') Out[31]: ' ytjoh'
format_spec詳解
在這裡,我們重點看一下格式描述(format_spec)這一項。
格式描述中含有6個選項,分別是 fill、align、sign、width、precision、type。 它們的位置關係如下:
[[fill]align][sign][#][0][width][,][.precision][type]
fill 可以是任意字元,預設為空格。
align 僅當指定最小寬度時有效。
< 左對齊(預設選項)
> 右對齊
= 僅對數字有效;將填充字元放到符號與數字間,例如 +0001234
^ 居中對齊
sign 僅對數字有效
+ 所有數字均帶有符號
- 僅負數帶有符號(預設選項)
即空格;正數前面帶空格,負數前面帶符號
'#' 只對整數有效
自動在二進位、八進位、十六進位數值前添加對應的 0b、0o、 0x。
',' 自動在每三個數字之間添加 , 分隔符。
width 十進位數字,定義最小寬度。如果未指定,則由內容的寬度來決定。
如果沒有指定對齊方式(align),那麼可以在 width 前面添加一個0來實現自動填充0,等價於 fill 設為 0 並且 align 設為 =。
precision 用於確定浮點數的精度,或字元串的最大長度。不可用於整型數值。
type 確定參數類型,預設為 s ,即字元串。
整數輸出類型:
b:以二進位格式輸出
c:將整數轉換成對應的 unicode 字元
d:以十進位輸出(預設選項)
o:以八進位輸出
x:以十六進位小寫輸出
X:以十六進位大寫輸出
n:與 d 相同,但使用當前環境的分隔符來分隔每3位數字
十進位浮點數輸出類型:
e:指數標記;使用科學計數法輸出,用e來表示指數部分,預設 precision 為6
E:與 e 相同,但使用大寫 E 來表示指數部分
f:以定點形式輸出數值,預設 precision 為6
F:與 f 相同
g:通用格式;對於給定的 precision p >= 1,取數值的p位有效數字,並以定點或科學計數法輸出(預設選項)
G:通用格式;與 g 相同,當數值過大時使用 E 來表示指數部分
n:與 g 相同,但使用當前環境的分隔符來分隔每3位數字
%:百分比標記;使用百分比的形式輸出數值,同時設定 f 標記
相關函數:format : 內置函數
用法:format(value[, format_spec])
本函數把值value按format_spec的格式來格式化,然而函數解釋format_spec是根據value的類型來決定的,不同的類型有不同的格式化解釋。當參數format_spec為空時,本函數等同於函數str(value)的方式。
其實本函數調用時,是把format(value, format_spec)的方式轉換為type(value).__format__(format_spec)方式來調用,因此在value類型里就查找方法__format__(),如果找不到此方法,就會返回異常TypeError
In [36]: print('aaaa'.__format__('?>20')) ????????????????aaaa In [36]: In [37]: format('aaaa','?>20') Out[37]: '????????????????aaaa'