在python中字符串的格式化分為兩種:%和format。那么我們在什么時候來使用它們呢?它們有什么區別呢?
舉個例子:我們根據一個坐標來表示一個動作
#定義一個坐標 point = (250,250) #使用%來格式化 s = '朝着敵人的坐標%s開炮'%point print(s) #直接報錯 #TypeError: not all arguments converted during string formatting #將s改為如下就不會報錯了 s = '朝着敵人的坐標%s開炮'%(point,) print(s) # 不報錯
同樣的我們使用format就不會出現這樣的問題:
#使用format格式化 s = '朝着敵人的坐標{}開炮'.format(point) print(s) # 正常輸出
由此可見:format比%的功能更強。
下面我們來對format的用法進行簡單的了解
1.直接f+string
在python3.6以后,加入了一個新特性:f-strings
#我們定義兩個變量 name age name = 'snow' age = 18 s = f'我叫{name},今年{age}歲' print(s)
可以直接在字符串的前面加上f來格式化字符串,更簡單。
2 通過位置
#我們也可以通過索引來直接用 使用*將列表打散,通過索引來取值 s1 = '我叫{0},今年{1}歲,喜歡{2}'.format(*l1) print(s1)
3 通過關鍵字
#也可以通過**將字典打散,通過key來取值
d = {'name':'shine','age':20,'hobby':'music'} s2 = 'my name is {name},i am {age} years old , i like {hobby}'.format(**d) print(s2)
4.通過對象屬性
#在類中,我們可以自定義__str__方法來實現特定的輸出 class Person: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return 'Name:{self.name} Age:{self.age}'.format(self = self) # 我們可以將self傳入{}中 person = Person('sun',22) print(person)
5.通過下標
#我們可以利用下標+索引 l1 = ['zhe','20','Teacher'] s4 = 'I am a {0[2]},my name is {0[0]},{0[1]} years old'.format(l1) print(s4)
6. 填充與對齊
填充常跟對齊一起使用
^、<、>分別是居中、左對齊、右對齊,后面帶寬度
:號后面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充。
s = '{:>10}'.format('18') #>后面的10 表示總共多少字符,10個字符,18占兩個,剩余的用空格填充 print(s) # 18 :后面帶填充的字符,默認為空 s1 = "{:0>10}".format('18') print(s1) #0000000018 s2 = '{:*>10}'.format('18是否') print(s2) #******18是否
備注:Python 字符串中的zfill()方法: 返回指定長度的字符串,原字符串右對齊,前面填充0。
zfill()方法語法:str.zfill(width)
參數width指定字符串的長度。原字符串右對齊,前面填充0。
返回指定長度的字符串。
s = '演員'
ret = s.zfill(10)
print(ret)
7. 精度與類型f
精度常跟類型f一起使用。
{ :.nf} .format(數字) .n 表示保留n位小數
num = 2.13658
print('{:.2f}'.format(num)) #2.14 四舍五入取固定位數的小數 其中.2表示長度為2的精度
num = 3
print('{:.2f}'.format(num)) #3.00 對於整數直接在保留固定位的小數位
8. 其他進制
format中,b、d、o、x分別表示二進制、十進制、八進制、十六進制。
In[1]: "{:b}".format(18) # 取18的二進制 Out[1]: '10010' In[2]: "{:d}".format(18) # 取18的十進制 Out[2]: '18' In[3]: "{:o}".format(18) # 取18的八進制 Out[3]: '22' In[4]: "{:x}".format(18) # 取18的十六進制 Out[4]: '12'
9. 千位分隔符
{:,}.format 中 冒號加逗號 表示可以將一個數字三位三位的用逗號分隔
In[1]: "{:,}".format(1234567890) Out[1]: '1,234,567,890'