1. 程式人生 > >字符串str.format()方法的個人整理

字符串str.format()方法的個人整理

需要 bing 無需 style self. field ole 居中對齊 位數

引言

字符串的內置方法大致有40來個,但是一些常用的其實就那麽20幾個,而且裏面還有類似的用法,區分度高比如isalpha,isalnum,isdigit,還有一些無時不刻都會用到的split切分,join拼接,strip首尾去指定字符,作用無非就是圍繞字符串的增刪改查來進行,本人認為要弄清楚和熟練使用這些常用的方法,一方面需要在理解的基礎上多多練習多多回顧,同時在工作使用中去鞏固,加深記憶。忘記沒關系,善於總結歸納,善於對自己大腦記憶的‘增刪改查’才是重點。

str.format的意義

作為一個初學者,最近發現字符串中最繁雜的一個方法莫過於:str.format()了,format見名思義,格式化,格式化完為了幹嘛,其實就是為了得到我們需要格式的數據,也就是格式化輸出,格式化輸出我們一開始學習的是用%s、%d來實現,但是這種方法有很多局限性,比如%s是按照位置格式化輸出,局限性顯而易見,如果一次性格式化輸出太多,還是根據位置來輸出的話就太容易出錯了。所以更精確的一種格式化輸出方法就是str.format()

str.format方法介紹

1、通過字符串中的花括號{}來識別替換字段,從而完成字符串的格式化。

2、替換的內容包括:字段名、格式說明符三部分,形式一般為:{字段名:格式說明符}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上是簡介,下面是幹貨:

具體實現:

1、簡單實現方法:

  • 省略不寫{} ____寫法類似%s按位置格式化輸出
  • 數字{十進制非負整數} ____寫法類似依據位置索引傳參
  • 變量名{關鍵字} ____寫法類似關鍵字參數傳參
  • 可以混合使用

1.1 省略不寫:花括號內省略不寫,代表傳遞位置參數

  • 替換字段形式{}
  • 註意事項:花括號個數少於等於後面的位置參數的個數,多了肯定報錯。
    # 用{}代表占位符,直接位置傳參
    print(我是{},喜歡{}!.format(滅霸,打響指))
    # 我是滅霸,喜歡打響指!
    
    # {}數量必須少於後面位置參數數量,不然報錯
    print(我是{},喜歡{},不喜歡{}。.format(
    宙斯,放大搶人頭,放空大,小短腿)) print(我是{},喜歡{},不喜歡{}。.format(宙斯,放大搶人頭)) # 報錯誤:IndexError: tuple index out of range

1.2 數字形式傳參:通過位置索引值傳遞位置參數

  • 索引從整數0開始
  • 索引可以重復引用,輸出
  • 索引數值就是後面位置參數放入一個元組來取值的過程,所以索引數值不能大於元組裏面位置參數的最大索引值,否則報錯
    print(我身高{0},年齡正好{1},{2}長。.format(180cm,18,15cm))
    # 我身高180cm,年齡正好18,15cm長。
    print(我身高{0},{0}不多不少,年齡正好{1}。.format(180cm,18))
    # 我身高180cm,180cm不多不少,年齡正好18。
    print(我身高{0},年齡正好{1},{2}長。.format(180cm,18))
    # IndexError: tuple index out of range

1.3 變量名{關鍵字} 傳遞輸出參數

  • 想想關鍵字參數怎麽傳參,類比一下,bingo!
  • 特別註意,關鍵字的變量名在參數那裏無需加引號,同時{}裏面引用直接填變量名。
    print(我的名字叫{name},我其實是一名{career}!.format(name=尹天仇,career=演員))
    # 我的名字叫尹天仇,我其實是一名演員!
    print(我叫{name2},又名{name1},我弟弟叫{name3}!.format(name1=至尊寶,name2=秦漢,name3=秦祥林))
    # 我叫秦漢,又名至尊寶,我弟弟叫秦祥林!

1.4 {}、{0}、{name}混合使用

  • 位置參數在前,關鍵字參數在後
  • {}不能與數字形式{0}同時使用。
    print(吹個{0},吹個{2},吹大了{1},玩{ball}!.format(,氣球,大氣球,ball=球球))
    # 吹個球,吹個大氣球,吹大了氣球,玩球球!
    print(吹個{},吹大了{},玩{ball}!.format(,氣球,大氣球,ball=球球))
    # 吹個球,吹大了氣球,玩球球!
    print(吹個{0},吹大了{1},玩{ball}!.format(,氣球,大氣球,ball=球球))
    # 吹個球,吹大了氣球,玩球球!
    print(吹個{0},吹大了{},玩{ball}!.format(,氣球,大氣球,ball=球球))
    #報錯 ValueError: cannot switch from manual field specification to automatic field numbering

2、使用元組和字典傳參:

  • str.format()方法可以使用*元組和**字典的形式傳參,可以混用。
  • 方法相當於*args和**kwargs打散傳參,元組按位置或索引傳參,字典按關鍵字傳參。
  • 位置參數、關鍵字參數、*元組、**字典也可以同時使用,但要註意位置參數在關鍵字參數前,*元組要在**字典前。
    # 元組
    print(我喜歡{},喜歡{},同時也喜歡{}!.format(*(籃球,足球,觀球)))
    # 我喜歡籃球,喜歡足球,同時也喜歡觀球!
    print(我喜歡{0},喜歡{1},同時也喜歡{2}!.format(*(籃球,足球,觀球)))
    # 我喜歡籃球,喜歡足球,同時也喜歡觀球!
    
    # 字典
    print({name}的女朋友是{gf},我也喜歡{gf}!.format(**{name:鋼鐵俠,gf:小辣椒}))
    # 鋼鐵俠的女朋友是小辣椒,我也喜歡小辣椒!
    
    # 元組+字典
    print(我是{beauty}的{1},我們都喜歡{0},請大家{2}!      .format(*(球類,球迷,文明觀球),**{beauty:斯嘉麗約翰遜,}))
    # 我是斯嘉麗約翰遜的球迷,我們都喜歡球類,請大家文明觀球!
    
    # 位置參數、關鍵字參數、元組、字典混合使用:
    print(我是{name},好像{age}了 ^_^,在{0},等你哦!\n喜歡{1}、{2}和{3}。\n我的唯一 >>>:{only_one}\n我的小可愛 >>>: {love}!      .format(武漢,name=蘇光體,age=18,*(讀書,健身,折騰數碼),**{only_one:楊林,love:蘇弘睿}))
    # 我是蘇光體,好像18了 ^_^,在武漢,等你哦!
    # 喜歡讀書、健身和折騰數碼。
    # 我的唯一 >>>:楊林
    # 我的小可愛 >>>: 蘇弘睿!

  使用元組或者字典格式化輸出的形式就是相當於將元組和字典打散,變成位置參數們和關鍵字參數們然後按照前面的方法傳參就行

3、對象參數格式化輸出傳值:

  • formate還可以使用對象屬性傳參,這個對象可以是實例化的對象,也可以是列表、字典
    # 對象屬性傳參
    # 實例化對象:
    class Dog:
        def __init__(self,name,speak):
            self.name=name
            self.speak=speak
    
    dog1=Dog(小黃,汪汪汪)
    print(我的{0.name}會{0.speak}。.format(dog1))
    # 我的小黃會汪汪汪。
    # 文件對象
    with open(text.txt,wb) as f:
        print(打開的文件名為:{0.name}.format(f))
    # 打開的文件名為:text.txt
    
    # 列表、字典對象
    print(I have a {0[0]} , I have a {0[1]} ..format([Apple,Pen]))
    print(我叫{0[name]},{0[id]}就是我!.format({name:阿星,id:9527}))
    print({1[name]}變成了{0[0]},藏進了{1[role]}的褲襠裏,為什麽不變{0[1]}而是{0[0]}呢?.format([葡萄,蘋果],{name:菩提老祖,role:至尊寶}))
    # I have a Apple , I have a Pen .
    # 我叫阿星,9527就是我!
    # 菩提老祖變成了葡萄,藏進了至尊寶的褲襠裏,為什麽不變蘋果而是葡萄呢?

4、格式說明符:規定傳入參數字符的格式

  • 比如:
    print({0:.4f}.format(3.1415926))
    #在傳入參數後面用冒號:寫入規定的格式:.4f(取4位小數) 結果為:3.1416
  • 說明符格式標準:[填充]對齊方式][正負號][#][0][寬度][分組選項][.精度][類型碼] 同時存在是有順序之分的,具體使用下面有具體示例:
  • 填充:
    • 填充字符只能有一個
    • 不指定默認用空格填充
    • 如果指定填充字符,則必須要同時指定對齊方式
  • 對齊方式:
    • < 左對齊
    • > 右對齊
    • ^ 居中對齊
    • = 在正負號和數字之間填充(僅對數字類型有效)可以輸出類似:+00000012的字符串。
  • 正負號:
    • 僅對數字類型生效
    • + - 正負號
    • 空格:正數前面需要添加一個空格,以便與負數對齊
  • 寬度width
    • 不指定寬度,寬度由內容決定
    • 寬度前有0,意味著用0填充,等價於 0=的填充和對齊方式
  • 精度
    • 指小數點後面展示的小數位數
    • 對於非數字類型,指最大字段寬度
    • 整數類型不能指定精度,會報錯的
  • 下面看示例吧:
    #在傳入參數後面用冒號:寫入規定的格式:.4f(取4位小數) 結果為:3.1416
    # 填充、對齊、寬度
    print({0:人>2}.format(<我是誰>))   # 寬度不夠,按實際字符顯示
    print({0:人<11}.format(<我>))
    print({0:人^11}.format(<我>))
    # <我是誰>
    # <我>人人人人人人人人
    # 人人人人<我>人人人人
    
    # 正負號、精度
    print({0:*=+10.4f}.format(3.1415926))  # ‘*‘>填充符,‘=‘>指定在正負號和數字之間填充,‘10‘>寬度,‘.4f‘>精度
    print({0:*>+10.4f}.format(3.1415926))  # 同上,‘>‘>右對齊
    # +***3.1416
    # ***+3.1416
    
    print({0:&>10.4f}.format(3.1415926))
    print({0:&<10.4f}.format(3.1415926))
    print({0:&>10.4}.format(我是中國人))  # 精度為4,去字符串中的前4個字符
    # &&&&3.1416
    # 3.1416&&&&
    # &&&&&&我是中國
  • 類型碼(規定輸出的數據類型)
    • 字符串類型
    • 整數類型
    • 浮點數類型

  

  

字符串str.format()方法的個人整理