Python3中的f-Strings增強(qiáng)版字符串格式化方法
在Python3.6提供f-Strings新的字符串格式化語(yǔ)法。不僅更加可讀、簡(jiǎn)潔,相比其他方式也不易造成錯(cuò)誤,而且還更快。
看完本文你將學(xué)習(xí)到如何以及為什么使用f-strings。正式開始之前,我們先看看之前格式化字符串語(yǔ)法。
1. 舊式字符串格式化
在Python3.6之前,主要有兩種方式格式化字符串:%-格式化 和 str.format()。下面我們先了解它們的用法以及局限性。
1.1 %-格式化
這時(shí)Python的官方字符串格式化方法,從語(yǔ)言開始時(shí)就存在。官方文檔明確提出不建議使用,并其他使用其他方式代替避免不必要的錯(cuò)誤。
String對(duì)象內(nèi)置了%操作,用于格式化字符串,請(qǐng)看示例:
>>> name = "Eric" >>> "Hello, %s." % name 'Hello, Eric.'
如果需要插入多個(gè)變量,則需要使用元祖:
>>> name = "Eric" >>> age = 74 >>> "Hello, %s. You are %s." % (name, age) 'Hello Eric. You are 74.'
上面兩個(gè)實(shí)例還比較好理解,但當(dāng)使用多個(gè)參數(shù),字符串變得很長(zhǎng)時(shí),可讀性會(huì)下降;因?yàn)槿唛L(zhǎng)易導(dǎo)致錯(cuò)誤,故不建議使用。
1.2. 使用 str.format()方法
這種較新的方式是Python2.6版本提供的。是%格式化的升級(jí)方式。使用正常的方法調(diào)用實(shí)現(xiàn)字符串轉(zhuǎn)換。其內(nèi)部通過類的__format__() 方法實(shí)現(xiàn)。使用時(shí)被替換的地方使用花括號(hào)標(biāo)記。
下面看個(gè)示例:
>>> "Hello, {}. You are {}.".format(name, age) 'Hello, Eric. You are 74.'
也可以通過索引方式引用變量:
>>> "Hello, {1}. You are {0}.".format(age, name) 'Hello, Eric. You are 74.'
但如果使用變量名作為參數(shù),而對(duì)于值也是對(duì)象屬性,則需要在實(shí)際參數(shù)中傳入對(duì)象。
>>> person = {'name': 'Eric', 'age': 74} >>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age']) 'Hello, Eric. You are 74.'
我們也可以使用**進(jìn)行簡(jiǎn)化字典傳輸:
>>> person = {'name': 'Eric', 'age': 74} >>> "Hello, {name}. You are {age}.".format(**person) 'Hello, Eric. You are 74.'
str.format方式對(duì)%格式化進(jìn)行了有限的升級(jí),但仍不是最好的。當(dāng)傳入多個(gè)參數(shù)時(shí),還是很冗余且易錯(cuò)。如果字典值傳遞給.format()變量,可以用.format(**some_dict)對(duì)其解包,并使用鍵索引對(duì)應(yīng)值,但是有更好的辦法進(jìn)行處理。
2. 增強(qiáng)版字符串格式化方式 f-Strings
f-Strings可以解決上述問題,而且容易使用且十分有效。2015年8月在Python3.6版中提供。
也稱為格式化字符串自變量,f開頭的字符串中花括號(hào)括起來的變量會(huì)被替換。該表達(dá)式在運(yùn)行時(shí)被評(píng)估并使用__format__方法進(jìn)行格式化。下面看一些示例:
>>> name = "Eric" >>> age = 74 >>> f"Hello, {name}. You are {age}." 'Hello, Eric. You are 74.'
與str.format()方法類似但更簡(jiǎn)潔。使用大寫字符F也行:
>>> F"Hello, {name}. You are {age}." 'Hello, Eric. You are 74.'
2.1. 格式化任意表達(dá)式
因?yàn)閒-string是在運(yùn)行時(shí)評(píng)估,因此可以放入任何有效Python表達(dá)式,這可以實(shí)現(xiàn)漂亮的任務(wù)。
>>> f"{2 * 37}" '74'
直接調(diào)用函數(shù):
>>> def to_lowercase(input): ... return input.lower() >>> name = "Eric Idle" >>> f"{to_lowercase(name)} is funny." 'eric idle is funny.'
干脆直接調(diào)用方法:
>>> f"{name.lower()} is funny." 'eric idle is funny.'
當(dāng)然也可以是自定義類。假設(shè)我們定義下面類:
class Comedian: def __init__(self, first_name, last_name, age): self.first_name = first_name self.last_name = last_name self.age = age def __str__(self): return f"{self.first_name} {self.last_name} is {self.age}." def __repr__(self): return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"
調(diào)用方法代碼:
>>> new_comedian = Comedian("Eric", "Idle", "74") >>> f"{new_comedian}" 'Eric Idle is 74.'
str() 和 repr() 方法用于實(shí)現(xiàn)以字符串形式表示對(duì)象。所以類定義時(shí)確保至少包括它們中的一個(gè)。如果需要挑選一個(gè),則為 repr(),因?yàn)樵谑褂胈_str__()的地方都可以使用__repr__()。
由__str__()返回的字符串是對(duì)象的非正式字符串表示,應(yīng)該是可讀的。由__repr__()返回的字符串是官方表示,應(yīng)該是明確的(外層多了引號(hào),長(zhǎng)度是原來長(zhǎng)度+2)。直接調(diào)用str()和repr()比直接使用_str__()和_repr__()要好。
缺省情況下使用str函數(shù),但可以使用!r標(biāo)識(shí)明確調(diào)用repr:
>>> f"{new_comedian}" 'Eric Idle is 74.' >>> f"{new_comedian!r}" 'Eric Idle is 74. Surprise!'
2.2. 多行f-strings
我們可以格式化多行字符串:
>>> name = "Eric" >>> profession = "comedian" >>> affiliation = "Monty Python" >>> message = ( ... f"Hi {name}. " ... f"You are a {profession}. " ... f"You were in {affiliation}." ... ) >>> message 'Hi Eric. You are a comedian. You were in Monty Python.'
但需要在每行前面增加f。下面代碼不工作:
>>> message = ( ... f"Hi {name}. " ... "You are a {profession}. " ... "You were in {affiliation}." ... ) >>> message 'Hi Eric. You are a {profession}. You were in {affiliation}.'
我們看到?jīng)]有f的行沒有被解析。
對(duì)于多行我們也可以使用反斜杠進(jìn)行換行:
>>> message = f"Hi {name}. " \ ... f"You are a {profession}. " \ ... f"You were in {affiliation}." ... >>> message 'Hi Eric. You are a comedian. You were in Monty Python.'
但如何使用三個(gè)分號(hào)“““:
>>> message = f""" ... Hi {name}. ... You are a {profession}. ... You were in {affiliation}. ... """ ... >>> message '\n Hi Eric.\n You are a comedian.\n You were in Monty Python.\n'
3. 總結(jié)
本文介紹了Python3.6提供的增強(qiáng)字符串格式化方法。通過與之前的兩種方法對(duì)比,f-string缺省更加簡(jiǎn)潔、易讀。
到此這篇關(guān)于Python3中的f-Strings增強(qiáng)版字符串格式化方法的文章就介紹到這了,更多相關(guān)Python格式化字符串f-string內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能示例
這篇文章主要介紹了Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能,結(jié)合實(shí)例形式分析了Django框架基于Pillow模塊的圖形驗(yàn)證碼生成與使用相關(guān)操作技巧,需要的朋友可以參考下2019-05-05Python利用Beautiful Soup模塊創(chuàng)建對(duì)象詳解
這篇文章主要介紹了Python利用Beautiful Soup模塊創(chuàng)建對(duì)象的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03python實(shí)現(xiàn)數(shù)組平移K位問題
這篇文章主要介紹了python實(shí)現(xiàn)數(shù)組平移K位問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Python中from…import *和import區(qū)別小結(jié)
本文介紹了Python中import和from...import兩種導(dǎo)入模塊的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12在python3中實(shí)現(xiàn)查找數(shù)組中最接近與某值的元素操作
今天小編就為大家分享一篇在python3中實(shí)現(xiàn)查找數(shù)組中最接近與某值的元素操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python爬蟲分析微博熱搜關(guān)鍵詞的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python爬蟲分析微博熱搜關(guān)鍵詞的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例
本篇文章主要介紹了Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06