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