這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Python中如何使用str.format方法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了玉林免費(fèi)建站歡迎大家使用!
字符串的內(nèi)置方法大致有40來個(gè),但是一些常用的其實(shí)就那么20幾個(gè),而且里面還有類似的用法,區(qū)分度高比如:isalpha,isalnum,isdigit,還有一些無時(shí)不刻都會(huì)用到的split切分,join拼接,strip首尾去指定字符,作用無非就是圍繞字符串的增刪改查來進(jìn)行,本人認(rèn)為要弄清楚和熟練使用這些常用的方法,一方面需要在理解的基礎(chǔ)上多多練習(xí)多多回顧,同時(shí)在工作使用中去鞏固,加深記憶。忘記沒關(guān)系,善于總結(jié)歸納,善于對(duì)自己大腦記憶的‘增刪改查’才是重點(diǎn)。
str.format的意義:
作為一個(gè)初學(xué)者,最近發(fā)現(xiàn)字符串中最繁雜的一個(gè)方法莫過于:str.format()了,format見名思義,格式化,格式化完為了干嘛,其實(shí)就是為了得到我們需要格式的數(shù)據(jù),也就是格式化輸出,格式化輸出我們一開始學(xué)習(xí)的是用%s、%d來實(shí)現(xiàn),但是這種方法有很多局限性,比如%s是按照位置格式化輸出,局限性顯而易見,如果一次性格式化輸出太多,還是根據(jù)位置來輸出的話就太容易出錯(cuò)了。所以更精確的一種格式化輸出方法就是str.format()
str.format方法介紹:
1、通過字符串中的花括號(hào){}來識(shí)別替換字段,從而完成字符串的格式化。
2、替換的內(nèi)容包括:字段名、格式說明符三部分,形式一般為:{字段名:格式說明符}
以上是簡(jiǎn)介,下面是干貨:
具體實(shí)現(xiàn):
1、簡(jiǎn)單實(shí)現(xiàn)方法:
(1)省略不寫{} ____寫法類似%s按位置格式化輸出
(2)數(shù)字{十進(jìn)制非負(fù)整數(shù)} ____寫法類似依據(jù)位置索引傳參
(3)變量名{關(guān)鍵字} ____寫法類似關(guān)鍵字參數(shù)傳參
(4)可以混合使用
1.1 省略不寫:花括號(hào)內(nèi)省略不寫,代表傳遞位置參數(shù)
替換字段形式{}
注意事項(xiàng):花括號(hào)個(gè)數(shù)少于等于后面的位置參數(shù)的個(gè)數(shù),多了肯定報(bào)錯(cuò)。
# 用{}代表占位符,直接位置傳參 print('我是{},喜歡{}!'.format('滅霸','打響指')) # 我是滅霸,喜歡打響指! # {}數(shù)量必須少于后面位置參數(shù)數(shù)量,不然報(bào)錯(cuò) print('我是{},喜歡{},不喜歡{}。'.format('宙斯','放大搶人頭','放空大','小短腿')) print('我是{},喜歡{},不喜歡{}。'.format('宙斯','放大搶人頭')) # 報(bào)錯(cuò)誤:IndexError: tuple index out of range
1.2 數(shù)字形式傳參:通過位置索引值傳遞位置參數(shù)
索引從整數(shù)0開始
索引可以重復(fù)引用,輸出
索引數(shù)值就是后面位置參數(shù)放入一個(gè)元組來取值的過程,所以索引數(shù)值不能大于元組里面位置參數(shù)的最大索引值,否則報(bào)錯(cuò)
print('我身高{0},年齡正好{1},{2}長(zhǎng)。'.format('180cm',18,'15cm')) # 我身高180cm,年齡正好18,15cm長(zhǎng)。 print('我身高{0},{0}不多不少,年齡正好{1}。'.format('180cm',18)) # 我身高180cm,180cm不多不少,年齡正好18。 print('我身高{0},年齡正好{1},{2}長(zhǎng)。'.format('180cm',18)) # IndexError: tuple index out of range
1.3 變量名{關(guān)鍵字} 傳遞輸出參數(shù)
想想關(guān)鍵字參數(shù)怎么傳參,類比一下,bingo!
特別注意,關(guān)鍵字的變量名在參數(shù)那里無需加引號(hào),同時(shí){}里面引用直接填變量名。
print('我的名字叫{name},我其實(shí)是一名{career}!'.format(name='尹天仇',career='演員')) # 我的名字叫尹天仇,我其實(shí)是一名演員! print('我叫{name2},又名{name1},我弟弟叫{name3}!'.format(name1='至尊寶',name2='秦漢',name3='秦祥林')) # 我叫秦漢,又名至尊寶,我弟弟叫秦祥林!
1.4 {}、{0}、{name}混合使用
位置參數(shù)在前,關(guān)鍵字參數(shù)在后
{}不能與數(shù)字形式{0}同時(shí)使用。
print('吹個(gè){0},吹個(gè){2},吹大了{(lán)1},玩{ball}!'.format('球','氣球','大氣球',ball='球球')) # 吹個(gè)球,吹個(gè)大氣球,吹大了氣球,玩球球! print('吹個(gè){},吹大了{(lán)},玩{ball}!'.format('球','氣球','大氣球',ball='球球')) # 吹個(gè)球,吹大了氣球,玩球球! print('吹個(gè){0},吹大了{(lán)1},玩{ball}!'.format('球','氣球','大氣球',ball='球球')) # 吹個(gè)球,吹大了氣球,玩球球! print('吹個(gè){0},吹大了{(lán)},玩{ball}!'.format('球','氣球','大氣球',ball='球球')) #報(bào)錯(cuò) ValueError: cannot switch from manual field specification to automatic field numbering
2、使用元組和字典傳參:
str.format()方法可以使用*元組和**字典的形式傳參,可以混用。
方法相當(dāng)于*args和**kwargs打散傳參,元組按位置或索引傳參,字典按關(guān)鍵字傳參。
位置參數(shù)、關(guān)鍵字參數(shù)、*元組、**字典也可以同時(shí)使用,但要注意位置參數(shù)在關(guān)鍵字參數(shù)前,*元組要在**字典前。
# 元組 print('我喜歡{},喜歡{},同時(shí)也喜歡{}!'.format(*('籃球','足球','觀球'))) # 我喜歡籃球,喜歡足球,同時(shí)也喜歡觀球! print('我喜歡{0},喜歡{1},同時(shí)也喜歡{2}!'.format(*('籃球','足球','觀球'))) # 我喜歡籃球,喜歡足球,同時(shí)也喜歡觀球! # 字典 print('{name}的女朋友是{gf},我也喜歡{gf}!'.format(**{'name':'鋼鐵俠','gf':'小辣椒'})) # 鋼鐵俠的女朋友是小辣椒,我也喜歡小辣椒! # 元組+字典 print('我是{beauty}的{1},我們都喜歡{0},請(qǐng)大家{2}!'\ .format(*('球類','球迷','文明觀球'),**{'beauty':'斯嘉麗約翰遜',})) # 我是斯嘉麗約翰遜的球迷,我們都喜歡球類,請(qǐng)大家文明觀球! # 位置參數(shù)、關(guān)鍵字參數(shù)、元組、字典混合使用: print('我是{name},好像{age}了 ^_^,在{0},等你哦!\n喜歡{1}、{2}和{3}。\n我的唯一 >>>:{only_one}\n我的小可愛 >>>: {love}!'\ .format('武漢',name='蘇光體',age=18,*('讀書','健身','折騰數(shù)碼'),**{'only_one':'楊林','love':'蘇弘睿'})) # 我是蘇光體,好像18了 ^_^,在武漢,等你哦! # 喜歡讀書、健身和折騰數(shù)碼。 # 我的唯一 >>>:楊林 # 我的小可愛 >>>: 蘇弘睿!
使用元組或者字典格式化輸出的形式就是相當(dāng)于將元組和字典打散,變成位置參數(shù)們和關(guān)鍵字參數(shù)們?nèi)缓蟀凑涨懊娴姆椒▊鲄⒕托小?/p>
3、對(duì)象參數(shù)格式化輸出傳值:
formate還可以使用對(duì)象屬性傳參,這個(gè)對(duì)象可以是實(shí)例化的對(duì)象,也可以是列表、字典。
# 對(duì)象屬性傳參 # 實(shí)例化對(duì)象: class Dog: def __init__(self,name,speak): self.name=name self.speak=speak dog1=Dog('小黃','汪汪汪') print('我的{0.name}會(huì){0.speak}。'.format(dog1)) # 我的小黃會(huì)汪汪汪。 # 文件對(duì)象 with open('text.txt','wb') as f: print('打開的文件名為:{0.name}'.format(f)) # 打開的文件名為:text.txt # 列表、字典對(duì)象 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]}變成了{(lán)0[0]},藏進(jìn)了{(lán)1[role]}的褲襠里,為什么不變{0[1]}而是{0[0]}呢?'.format(['葡萄','蘋果'],{'name':'菩提老祖','role':'至尊寶'})) # I have a Apple , I have a Pen . # 我叫阿星,9527就是我! # 菩提老祖變成了葡萄,藏進(jìn)了至尊寶的褲襠里,為什么不變蘋果而是葡萄呢?
4、格式說明符:規(guī)定傳入?yún)?shù)字符的格式
比如:
print('{0:.4f}'.format(3.1415926)) #在傳入?yún)?shù)后面用冒號(hào):寫入規(guī)定的格式:.4f(取4位小數(shù)) 結(jié)果為:3.1416
說明符格式標(biāo)準(zhǔn):[填充]對(duì)齊方式][正負(fù)號(hào)][#][0][寬度][分組選項(xiàng)][.精度][類型碼] 同時(shí)存在是有順序之分的,具體使用下面有具體示例:
填充:
(1)填充字符只能有一個(gè)
(2)不指定默認(rèn)用空格填充
(3)如果指定填充字符,則必須要同時(shí)指定對(duì)齊方式
對(duì)齊方式:
(1)< 左對(duì)齊
(2)> 右對(duì)齊
(3)^ 居中對(duì)齊
(4)= 在正負(fù)號(hào)和數(shù)字之間填充(僅對(duì)數(shù)字類型有效)可以輸出類似:+00000012的字符串。
正負(fù)號(hào):
(1)僅對(duì)數(shù)字類型生效
(2)+ - 正負(fù)號(hào)
(3)空格:正數(shù)前面需要添加一個(gè)空格,以便與負(fù)數(shù)對(duì)齊
寬度width
(1)不指定寬度,寬度由內(nèi)容決定
(2)寬度前有0,意味著用0填充,等價(jià)于 0=的填充和對(duì)齊方式
精度
(1)指小數(shù)點(diǎn)后面展示的小數(shù)位數(shù)。
(2)對(duì)于非數(shù)字類型,指最大字段寬度。
(3)整數(shù)類型不能指定精度,會(huì)報(bào)錯(cuò)的。
下面看示例吧:
#在傳入?yún)?shù)后面用冒號(hào):寫入規(guī)定的格式:.4f(取4位小數(shù)) 結(jié)果為:3.1416 # 填充、對(duì)齊、寬度 print('{0:人>2}'.format('<我是誰>')) # 寬度不夠,按實(shí)際字符顯示 print('{0:人<11}'.format('<我>')) print('{0:人^11}'.format('<我>')) # <我是誰> # <我>人人人人人人人人 # 人人人人<我>人人人人 # 正負(fù)號(hào)、精度 print('{0:*=+10.4f}'.format(3.1415926)) # '*'>填充符,'='>指定在正負(fù)號(hào)和數(shù)字之間填充,'10'>寬度,'.4f'>精度 print('{0:*>+10.4f}'.format(3.1415926)) # 同上,'>'>右對(duì)齊 # +***3.1416 # ***+3.1416 print('{0:&>10.4f}'.format(3.1415926)) print('{0:&<10.4f}'.format(3.1415926)) print('{0:&>10.4}'.format('我是中國(guó)人')) # 精度為4,去字符串中的前4個(gè)字符 # &&&&3.1416 # 3.1416&&&& # &&&&&&我是中國(guó)
類型碼(規(guī)定輸出的數(shù)據(jù)類型)
(1)字符串類型
(2)整數(shù)類型
(3)浮點(diǎn)數(shù)類型
# 字符串類型(默認(rèn)類型,忽視) print('{0:s}'.format('abc')) # abc print('{0:}'.format('abc')) # abc # 整數(shù)類型 # b 二進(jìn)制|c Unicode字符|d 十進(jìn)制整數(shù)|還有很多比如o八進(jìn)制|x十六進(jìn)制...等等 print('{0:b}'.format(101)) # 1100101 print('{0:c}'.format(101)) # e print('{0:d}'.format(666)) # 666 # 浮點(diǎn)數(shù)字類型 # e 科學(xué)計(jì)數(shù)(默認(rèn)精度6位) print('{0:e}'.format(31415926)) # 3.141593e+07 # f 定點(diǎn)記法(默認(rèn)精度6位) print('{0:f}'.format(3.1415926)) # 3.141593
以上例子可以說不太全面,只是大概舉了幾個(gè)常見的,除了e,f類型還有g(shù)通用類型,n number類型,對(duì)于日常使用的話并不常用。所以不一一列出。
5、其他補(bǔ)充:
花括號(hào)本事如需格式化輸出,可以用外套2層花括號(hào)轉(zhuǎn)義解決
print('{{0}}'.format('abc')) # {0} print('{{{0}}}'.format('abc')) # {abc}
一些另類格式化輸出:
from datetime import datetime print('今天是:{0:%Y-%m %H:%M}'.format(datetime.now())) # 結(jié)果: 今天是:2019-05 15:10
總結(jié):
str.format()格式化輸出方法可以說是%s的加強(qiáng)型,特別是在處理更復(fù)雜的格式化輸出過程時(shí)候,可以更精確的進(jìn)行達(dá)到輸出目的,它集成的方法可以說比較繁雜,很多方法個(gè)人認(rèn)為用處不大,僅僅是錦上添花的作用,個(gè)人認(rèn)為只要掌握前面幾個(gè)簡(jiǎn)單的位置參數(shù)、關(guān)鍵字參數(shù)、元組、字典的傳參形式的格式化輸出就可以了。后面的方法可以有,但是不建議進(jìn)行強(qiáng)行記憶,因?yàn)榫τ邢蓿脮r(shí)再打開翻翻也就明了。
上述就是小編為大家分享的Python中如何使用str.format方法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。