成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

你所不知道的Python | 字符串格式化的演進(jìn)之路

Blackjun / 617人閱讀

摘要:然而為了讓我們更方便的使用這個(gè)常用功能,語言本身也在對(duì)字符串格式化方法進(jìn)行迭代。不少使用過的小伙伴會(huì)知道其中的模板字符串,采用直接在字符串中內(nèi)嵌變量的方式進(jìn)行字符串格式化操作,在版本中也為我們帶來了類似的功能字面量格式化字符串,簡稱。

字符串格式化對(duì)于每個(gè)語言來說都是一個(gè)非?;A(chǔ)和常用的功能,學(xué)習(xí)Python的同學(xué)大概都知道可以用%語法來格式化字符串。然而為了讓我們更方便的使用這個(gè)常用功能,語言本身也在對(duì)字符串格式化方法進(jìn)行迭代。

Python 2.6以前:%操作符

在Python 2.6出現(xiàn)之前,字符串迭代只有一種方法,就是%(也是取模)操作符,%操作符支持unicode和str類型的Python字符串,效果和C語言中的sprintf()方法相似,下面是一個(gè)使用%格式化字符串的例子:

print("I"m %s. I"m %d year old" % ("Tom", 27))

%符號(hào)前面使用一個(gè)字符串作為模板,模板中有標(biāo)記格式的占位符號(hào),%后面是一個(gè)tuple或者dict,用來傳遞需要格式化的值。占位符控制著顯示的格式,下面列表展示了占位符的種類:

占位符 內(nèi)容
%d 十進(jìn)制整數(shù)
%i 十進(jìn)制整數(shù)
%o 八進(jìn)制整數(shù)
%u 無符號(hào)整數(shù)
%x 無符號(hào)十六進(jìn)制(小寫)
%X 無符號(hào)十六進(jìn)制(大寫)
%e 浮點(diǎn)型(科學(xué)記數(shù)法,小寫)
%E 浮點(diǎn)型(科學(xué)記數(shù)法,大寫)
%f 浮點(diǎn)數(shù)
%F 浮點(diǎn)數(shù)
%g 浮點(diǎn)型,如果小數(shù)位數(shù)超過4位,使用科學(xué)記數(shù)法表示(小寫)
%G 浮點(diǎn)型,如果小數(shù)位數(shù)超過4位,使用科學(xué)記數(shù)法表示(大寫)
%c 單個(gè)字符
%r 字符串(調(diào)用repr()方法生成)
%s 字符串(調(diào)用str()方法生成)

除了對(duì)數(shù)據(jù)類型的指定,%操作符還支持更復(fù)雜的格式控制:

%[數(shù)據(jù)名稱][對(duì)齊標(biāo)志][寬度].[精度]類型
名稱 內(nèi)容
數(shù)據(jù)名稱 數(shù)據(jù)名稱用于字典賦值,如果%符號(hào)后面?zhèn)鬟f的數(shù)組就不需要填寫了
對(duì)齊標(biāo)志 有+、-、0、‘ ’四種,+表示顯示正負(fù)數(shù)符號(hào),-表示左對(duì)齊,空格表示在左側(cè)填充一個(gè)空格,0表示用0填充
寬度 表示格式化后的字符串長度,位數(shù)不足用0或空格補(bǔ)齊
精度 小數(shù)點(diǎn)后的位數(shù)
類型 數(shù)據(jù)類型(參考占位符種類)

例如print("%053f" % "12.34")會(huì)輸出0012.340

Python 2.6:format函數(shù)

到Python2.6時(shí),出現(xiàn)了一種新的字符串格式化方式,str.format()函數(shù),相比于%操作符,format函數(shù)使用{}和:代替了%,威力更加強(qiáng)大,在映射關(guān)系方面,format函數(shù)支持位置映射、關(guān)鍵字映射、對(duì)象屬性映射、下標(biāo)映射等多種方式,不僅參數(shù)可以不按順序,也可以不用參數(shù)或者一個(gè)參數(shù)使用多次,下面通過幾個(gè)例子來說明。

"{1} {0}".format("abc", 123)? # 可以不按順序進(jìn)行位置映射,輸出"123 abc"

"{} {}".format("abc", 123)? # 可以不指定參數(shù)名稱,輸出"abc 123"

"{1} {0} {1}".format("abc", 123)? # 參數(shù)可以使用多次,輸出"123 abc 123"

"{name} {age}".format(name="tom", age=27)? # 可以按關(guān)鍵字映射,輸出"tom 27"

"{person.name} {person.age}".format(person=person)? # 可以按對(duì)象屬性映射,輸出"tom 27"

"{0[1]} {0[0]}".format(lst)? # 通過下標(biāo)映射

可以看到,format函數(shù)比%操作符使用起來更加方便,不需要記住太多各種占位符代表的意義,代碼可讀性也更高。在復(fù)雜格式控制方面,format函數(shù)也提供了更加強(qiáng)大的控制方式:

[[填充字符]對(duì)齊方式][符號(hào)標(biāo)志][#][寬度][,][.精度][類型]

例如:

"{:S^+#016,.2f}".format(1234)? # 輸出"SSS+1,234.00SSSS"

我們以上面的代碼為例,通過表格說明一下format格式控制參數(shù):

類型 說明 示例說明
填充字符 不填時(shí)默認(rèn)用空格填充 S表示用S填充
對(duì)齊方式 ^表示居中對(duì)齊、<表示左對(duì)齊、>表示右對(duì)齊 ^表示居中對(duì)齊,左右位數(shù)不足部分會(huì)用填充字符填充
符號(hào)標(biāo)志 +表示有符號(hào)(正數(shù)前顯示+,負(fù)數(shù)前顯示-),空格表示整數(shù)前加一個(gè)空格以和負(fù)數(shù)對(duì)齊 +表示正數(shù)前顯示空格
# 表示是否在二進(jìn)制、八進(jìn)制、十六進(jìn)制前顯示0b、0o、0x等符號(hào) #表示顯示進(jìn)制符號(hào),由于是十進(jìn)制,所以不顯示
寬度 表示輸出字符串的寬度 16表示字符串寬度為16,不足部分會(huì)補(bǔ)齊
, 表示使用,作為千位分隔符 ,表示使用千位分隔符
精度 表示小數(shù)點(diǎn)后數(shù)字位數(shù) .2表示精度為2為
類型 s表示字符串類型,c表示字符類型,bod分別表示二八十進(jìn)制,xX表示小寫和大寫十六進(jìn)制,eE表示小寫和大寫的科學(xué)記數(shù)法,f表示浮點(diǎn)型 f表示浮點(diǎn)型數(shù)字

可以看到format函數(shù)在%基礎(chǔ)上豐富了格式控制種類,并且使輸出更容易。

Python 3.6:f-string

不少使用過ES6的小伙伴會(huì)知道其中的模板字符串,采用直接在字符串中內(nèi)嵌變量的方式進(jìn)行字符串格式化操作,Python在3.6版本中也為我們帶來了類似的功能:Formatted String Literals(字面量格式化字符串),簡稱f-string。

f-string就是以f""開頭的字符串,類似u""和b"",字符串內(nèi)容和format方法中的格式一樣,但是可以直接將變量帶入到字符串中,可讀性進(jìn)一步增加,例如:

amount = 1234
f"請(qǐng)轉(zhuǎn)賬給我{amount:,.2f}元"? #?"請(qǐng)轉(zhuǎn)賬給我1,234.00元"

同時(shí),f-string的性能是比%和format都有提升的,我們做一個(gè)簡單的測試,分別使用%操作符、format和f-string將下面語句執(zhí)行10000次:

"My name is %s and i"m %s years old." % (name, age)
"My name is {} and i"m {} years old.".format(name, age)
f"My name is {name} and i"m {age} years old."

用時(shí)結(jié)果如下:

總結(jié)

如果你的項(xiàng)目使用的Python版本已經(jīng)提升到3.6,f-string格式化是首選方式,不僅在保持功能強(qiáng)大的同時(shí)語義上更容易理解,而且性能也有較大的提升。如果項(xiàng)目還沒有提升到3.6或者使用的2.7,更建議使用format,雖然性能上沒有優(yōu)勢,但是語義上還是比%操作符更加便于理解的,功能也更加強(qiáng)大。

歡迎關(guān)注我的公眾號(hào)【Python私房菜】

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41856.html

相關(guān)文章

  • 所不知道Python | 函數(shù)參數(shù)演進(jìn)之路

    摘要:有一點(diǎn)需要注意的是,默認(rèn)參數(shù)需要設(shè)置在必選參數(shù)后面,并且默認(rèn)參數(shù)既可以通過位置調(diào)用,也可以通過關(guān)鍵字調(diào)用。通過位置指定參數(shù)通過位置指定參數(shù)報(bào)錯(cuò),默認(rèn)參數(shù)必須在必選參數(shù)后面參數(shù)默認(rèn)值既支持關(guān)鍵字參數(shù),也支持僅限關(guān)鍵字參數(shù)。 showImg(https://segmentfault.com/img/bVbdxcE?w=1224&h=618); 函數(shù)參數(shù)處理機(jī)制是Python中一個(gè)非常重要的...

    FingerLiu 評(píng)論0 收藏0
  • 所不知道Python | 字符連接秘密

    摘要:私房菜輸出私房菜方法使用方法方法是中出現(xiàn)的一種代替操作符的字符串格式化方法,同樣可以用來連接字符串。私房菜方法使用方法字符串有一個(gè)內(nèi)置方法,其參數(shù)是一個(gè)序列類型,例如數(shù)組或者元組等。 showImg(https://segmentfault.com/img/bVbcR8e?w=578&h=375); 字符串連接,就是將2個(gè)或以上的字符串合并成一個(gè),看上去連接字符串是一個(gè)非?;A(chǔ)的小問題...

    alin 評(píng)論0 收藏0
  • 20170917 前端開發(fā)周報(bào):JavaScript函數(shù)式編程、作用域和閉包

    摘要:用函數(shù)式編程對(duì)進(jìn)行斷舍離當(dāng)從業(yè)的老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了的特性,也不用面向?qū)ο罅?,最后發(fā)現(xiàn)了真愛啊作用域和閉包作用域和閉包在里非常重要。旨在幫助非函數(shù)式編程的同學(xué),能快速切入到函數(shù)式編程的理念。 1、用函數(shù)式編程對(duì)JavaScript進(jìn)行斷舍離 當(dāng)從業(yè)20的JavaScript老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了90%的特性,也不用面向?qū)ο罅?,最后發(fā)現(xiàn)了真愛?。。?! https:/...

    tomener 評(píng)論0 收藏0
  • 20170917 前端開發(fā)周報(bào):JavaScript函數(shù)式編程、作用域和閉包

    摘要:用函數(shù)式編程對(duì)進(jìn)行斷舍離當(dāng)從業(yè)的老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了的特性,也不用面向?qū)ο罅?,最后發(fā)現(xiàn)了真愛啊作用域和閉包作用域和閉包在里非常重要。旨在幫助非函數(shù)式編程的同學(xué),能快速切入到函數(shù)式編程的理念。 1、用函數(shù)式編程對(duì)JavaScript進(jìn)行斷舍離 當(dāng)從業(yè)20的JavaScript老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了90%的特性,也不用面向?qū)ο罅耍詈蟀l(fā)現(xiàn)了真愛?。。?! https:/...

    cyixlq 評(píng)論0 收藏0
  • 20170917 前端開發(fā)周報(bào):JavaScript函數(shù)式編程、作用域和閉包

    摘要:用函數(shù)式編程對(duì)進(jìn)行斷舍離當(dāng)從業(yè)的老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了的特性,也不用面向?qū)ο罅?,最后發(fā)現(xiàn)了真愛啊作用域和閉包作用域和閉包在里非常重要。旨在幫助非函數(shù)式編程的同學(xué),能快速切入到函數(shù)式編程的理念。 1、用函數(shù)式編程對(duì)JavaScript進(jìn)行斷舍離 當(dāng)從業(yè)20的JavaScript老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了90%的特性,也不用面向?qū)ο罅耍詈蟀l(fā)現(xiàn)了真愛?。。?! https:/...

    lentoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<