python強大的字串格式化函式 - format

pythontab發表於2016-07-22

自python2.6開始,新增了一種格式化字串的函式str.format(),可謂威力十足。那麼,他跟之前的%型格式化字串相比,有什麼優越的存在呢?讓我們來揭開它羞答答的面紗。

語法

它透過{}和:來代替%


位置方法格式化

>>> '{}.{}'.format('pythontab', 'com')
'pythontab.com'
>>> '{}.{}.{}'.format('www', 'pythontab', 'com')
'www.pythontab.com'
>>> '{1}.{2}'.format('www', 'pythontab', 'com')
'pythontab.com'
>>> '{1}.{2} | {0}.{1}.{2}'.format('www', 'pythontab', 'com')
'pythontab.com | www.pythontab.com'


字串的format函式可以接受不限個引數,引數位置可以不按順序,引數可以不使用或者使用多次,非常靈活

注意: python2.6下不能為空{},python2.7以上版本可以。


透過關鍵字引數

>>> '{domain}, {year}'.format(domain='www.pythontab.com', year=2016)
'www.pythontab.com, 2016'
>>> '{domain} ### {year}'.format(domain='www.pythontab.com', year=2016)
'www.pythontab.com ### 2016'
>>> '{domain} ### {year}'.format(year=2016,domain='www.pythontab.com')
'www.pythontab.com ### 2016'


透過物件屬性

>>> class website: 
        def __init__(self,name,type): 
            self.name,self.type = name,type 
        def __str__(self): 
          return 'Website name: {self.name}, Website type: {self.type} '.format(self=self) 
>>> print str(website('pythontab.com', 'python'))
Website name: pythontab.com, Website type: python
>>> print website('pythontab.com', 'python')
Website name: pythontab.com, Website type: python


透過下標

>>> '{0[1]}.{0[0]}.{1}'.format(['pyhtontab', 'www'], 'com')
'www.pyhtontab.com'


有了這些便捷的“對映”方式,我們就有了偷懶利器。基本的python知識告訴我們,list和tuple可以透過“打散”成普通引數給函式,而dict可以打散成關鍵字引數給函式(透過和*)。所以可以輕鬆的傳個list/tuple/dict給format函式, 非常靈活。


格式限定符

它有著豐富的的“格式限定符”(語法是{}中帶:號),比如:

填充與對齊

填充常跟對齊一起使用

^、<、>分別是居中、左對齊、右對齊,後面頻寬度

:號後面帶填充的字元,只能是一個字元,不指定的話預設是用空格填充


程式碼例項:

>>> '{:>10}'.format(2016)
'      2016'
>>> '{:#>10}'.format(2016)
'######2016'
>>> '{:0>10}'.format(2016)
'0000002016'


數字精度與型別f

精度常跟型別f一起使用

>>> '{:.2f}'.format(2016.0721)
'2016.07'


其中.2表示長度為2的精度,f表示float型別。

其他型別

主要就是進位制了,b、d、o、x分別是二進位制、十進位制、八進位制、十六進位制。

>>> '{:b}'.format(2016)
'11111100000'
>>> '{:d}'.format(2016)
'2016'
>>> '{:o}'.format(2016)
'3740'
>>> '{:x}'.format(2016)
'7e0'
>>>


用,號還能用來做金額的千位分隔符。

>>> '{:,}'.format(20160721)
'20,160,721'


format的功能太強大了, 還有很多功能, 大家可以去嘗試一下。

相關文章