国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Blackjun / 609人閱讀

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

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

Python 2.6以前:%操作符

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

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

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

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

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

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

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

Python 2.6:format函數(shù)

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

"{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)? # 可以按對象屬性映射,輸出"tom 27"

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

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

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

例如:

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

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

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

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

Python 3.6:f-string

不少使用過ES6的小伙伴會知道其中的模板字符串,采用直接在字符串中內(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"請轉(zhuǎn)賬給我{amount:,.2f}元"? #?"請轉(zhuǎn)賬給我1,234.00元"

同時,f-string的性能是比%和format都有提升的,我們做一個簡單的測試,分別使用%操作符、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."

用時結(jié)果如下:

總結(jié)

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

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41856.html

相關(guān)文章

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

    摘要:有一點需要注意的是,默認(rèn)參數(shù)需要設(shè)置在必選參數(shù)后面,并且默認(rèn)參數(shù)既可以通過位置調(diào)用,也可以通過關(guān)鍵字調(diào)用。通過位置指定參數(shù)通過位置指定參數(shù)報錯,默認(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中一個非常重要的...

    FingerLiu 評論0 收藏0
  • 所不知道Python | 字符連接秘密

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

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

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

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

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

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

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

    lentoo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<