%和format的區別


  在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'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM