1. 程式人生 > 實用技巧 >字串的格式化輸出

字串的格式化輸出

一、定義:所謂字元申格式化就是要先制定個模板。 在這個模板中某個或者某幾個地方留出空位來,然後在那些空位填上字串,井且在顯示結果中,字特串要符合空位置所設定的約束條件。

二、格式化輸出的方式:%、str.format、f{str}

  1、%號格式化輸出

    Brith:%號格式化字串的方式從Python誕生之初就已經存在,時至今日,python官方也並未棄用%號,但也並不推薦這種格式化方式。

     (1)用%s佔位,但格式的字串(即%s)與被格式化的字串(即傳入的值)必須按照位置一一對應

        例1:

# a = "大金塊"
# b = "金少"
# print("%s說那個%s好大好亮"%(b,a))
# print("%s說%s好高好帥"%(a,b))

        例2:

# name_str = "jack"
# age_str = 18
# print("我的名字是%s,我的年齡為%s"%(name_str,age_str))

     (2)可以通過字典方式格式化,既打破了位置帶來的限制與困擾,又能減少程式碼行數,使程式碼看起來更整潔

           例1:

# dic = {"a":"大金塊","b":"金少"}
# print("%(b)s說那個%(a)s好大好亮"%(dic))
# print("%(a)s%(b)s好高好帥"%(dic))

              例2

dic = {"name_str":"jack","age_str":"18"}


print("我的名字是%(name_str)s,我的年齡是%(age_str)s"%(dic))

   2、 str.format

    Birth:format方法是在Python 2.6中引入的,是字串型別的內建方法。因為str.format的方式在效能和使用的靈活性上都比%號更勝一籌,所以推薦使用。

      (1)用{}佔位,傳入引數時需按位置一一對應

          例:

# name = "任金中"
# ginder = "男"
# age = "19"
# stature = "173cm"
# appearance = "帥氣"
# print("我是{},性別{},年齡{},身高{},外表比較{}".format(name,ginder,age,stature,appearance))

      (2)通過字典方式格式化

         例:

# dic = {"name":"任金中","ginder":"男","age":"19","stature":"173cm","appearance":"帥氣"}
# print("我是{name},性別{ginder},年齡{age},身高{stature},外表比較{appearance}".format(**dic))

      (3)通過關鍵字引數格式化
       
  例:
#print("我是{name},性別{ginder},年齡{age},身高{stature},外表比較{appearance}".format(name = "任金中",ginder = "男",age = "19",stature = "173cm",appearance = "帥氣"))
      (4)使用索引取對應位置的值
         例:
# print('{0}{0}{1}{0}'.format('x','y'))
# print("{2}{0}{1}{0}".format("x","y","z"))、
      (5)格式化填充輸出
        
例:
print('{0:*<10}'.format('開始執行'))  #開始執行******
print('{0:*>10}'.format('開始執行'))  #******開始執行
print('{0:*^10}'.format('開始執行'))  #***開始執行***

冒號(:)前面空白或者是0,冒號(:)後邊帶填充字元(*),只能是一個字元,不指定的話預設是空格填充

^/</>分別是居中、左對齊、右對齊,後面頻寬度(字元數量)

      (6)精度與進位制
print('{salary:.3f}'.format(salary=1232132.12351))  
#精確到小數點後3位,四捨五入,結果為:1232132.124

print('{0:b}'.format(123))  
# 轉成二進位制,結果為:1111011

print('{0:o}'.format(9))  
# 轉成八進位制,結果為:11 print('{0:x}'.format(15)) # 轉成十六進位制,結果為:f print('{0:,}'.format(99812939393931)) # 千分位格式化(三個數標一次),結果為:99,812,939,393,931

   3、 f-string
     Birth:str.format() 比 %格式化高階了一些,但是它還是有自己的缺陷。當需要傳入的字串過多時,仍然會顯得非常冗長。
於是在Python 3.6中引入 了f-strings,不僅比str.format更簡潔,效能上也更勝一籌。
     PS:f-string是以f或F開頭的字串,核心在於字串中[]的運用
       1.{}中可以是變數名
         例:
name = "任金中"
ginder = ""
age = "19"
stature = "173cm"
appearance = "帥氣"
print(f"我叫{name},今年{age},身高是{stature},長得比較{appearance}")
          2.{}中可以是表示式
         例:
a = 5
b = 50
print(f"c是{a*b}") #c是250