1. 程式人生 > >Python之路(1)format詳解

Python之路(1)format詳解

Str.format方法比之 %方法的優點:

1.傳入資料可以不限引數資料型別

2.引數位置可以不按照傳入順序,且單個引數可以輸出多次或者不輸出

3.強大的填充和對齊功能,完善的進位制轉換和精度控制

一:填充

#使用關鍵字填充

>>> #使用key填充
print('{name} today {action}'.format(name='jopen',action='play soccer'))
jopen today play soccer

#使用字典填充

>>> place={'where':'wuhan','country':'China'}
>>> print('{place[where]} is a part of {place[contury]}'.format(place=place))
wuhan is a part of China

或者

>>> place={'where':'wuhan','country':'China'}
>>> print('{where} is a part of {contury}'.format(**place))
wuhan is a part of China

#使用索引填充

>>> print('{1} is {0}'.format('fruit','apple'))
apple is fruit

#通過物件屬性來填充

class Hello:
    def __init__(self,name1,name2):
        self.name1=name1;
        self.name2=name2
    def __str__(self):
        return 'Hello {self.name1},I am {self.name2}'.format(self=self)
print(str(Hello('Tom','Jopen')))
Hello Tom,I am Jopen

#多次使用引數和不使用傳入的引數

>>> print('{1} {1} {1},so many{1}'.format('apple','banana'))
banana banana banana,so manybanana

二:對齊與填充

對齊與填充經常一起使用

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

居中:居中符號為:,後面跟填充的字元,只能是一個字元,不指定填充字元預設為空格

#左填充

>>> ('{:*>8}').format('Hello')
'***Hello'

#右填充

>>> ('{:*<8}').format('Hello')
'Hello***
#中間對齊
>>> ('{:*^8}').format('Hello')
'*Hello**'

三:精度

#浮點數

>>> '{:.3f}'.format(3.1415926)
'3.142'

#字串

>>> '{:.3s}'.format('3.1415926')
'3.1'

四:進位制轉換

>>> '{:b}'.format(33)
'100001'
>>> '{:d}'.format(33)
'33'
>>> '{:o}'.format(33)
'41'
>>> '{:x}'.format(33)
'21'

b,d,o,x分別為二進位制,十進位制,八進位制,十六進位制

五:格式轉化

!s,!r,!a 對應str(), repr(),acdii()

>>> '{!s:*>8}'.format(8)
'*******8'
repr()將輸入轉化為直譯器讀取的形式!a我卻不能轉化為ascii碼,不知道哪裡出了問題.