您好,登錄后才能下訂單哦!
如何在Python3中使用f-Strings格式化字符串?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
在Python3.6之前,主要有兩種方式格式化字符串:%-格式化 和 str.format()。下面我們先了解它們的用法以及局限性。
這時Python的官方字符串格式化方法,從語言開始時就存在。官方文檔明確提出不建議使用,并其他使用其他方式代替避免不必要的錯誤。
String對象內置了%操作,用于格式化字符串,請看示例:
>>> name = "Eric" >>> "Hello, %s." % name 'Hello, Eric.'
如果需要插入多個變量,則需要使用元祖:
>>> name = "Eric" >>> age = 74 >>> "Hello, %s. You are %s." % (name, age) 'Hello Eric. You are 74.'
上面兩個實例還比較好理解,但當使用多個參數,字符串變得很長時,可讀性會下降;因為冗長易導致錯誤,故不建議使用。
這種較新的方式是Python2.6版本提供的。是%格式化的升級方式。使用正常的方法調用實現字符串轉換。其內部通過類的__format__() 方法實現。使用時被替換的地方使用花括號標記。
下面看個示例:
>>> "Hello, {}. You are {}.".format(name, age) 'Hello, Eric. You are 74.'
也可以通過索引方式引用變量:
>>> "Hello, {1}. You are {0}.".format(age, name) 'Hello, Eric. You are 74.'
但如果使用變量名作為參數,而對于值也是對象屬性,則需要在實際參數中傳入對象。
>>> 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方式對%格式化進行了有限的升級,但仍不是最好的。當傳入多個參數時,還是很冗余且易錯。如果字典值傳遞給.format()變量,可以用.format(**some_dict)對其解包,并使用鍵索引對應值,但是有更好的辦法進行處理。
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.'
因為f-string是在運行時評估,因此可以放入任何有效Python表達式,這可以實現漂亮的任務。
>>> f"{2 * 37}" '74'
直接調用函數:
>>> def to_lowercase(input): ... return input.lower() >>> name = "Eric Idle" >>> f"{to_lowercase(name)} is funny." 'eric idle is funny.'
干脆直接調用方法:
>>> f"{name.lower()} is funny." 'eric idle is funny.'
當然也可以是自定義類。假設我們定義下面類:
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!"
調用方法代碼:
>>> new_comedian = Comedian("Eric", "Idle", "74") >>> f"{new_comedian}" 'Eric Idle is 74.'
str() 和 repr() 方法用于實現以字符串形式表示對象。所以類定義時確保至少包括它們中的一個。如果需要挑選一個,則為 repr(),因為在使用__str__()的地方都可以使用__repr__()。
由__str__()返回的字符串是對象的非正式字符串表示,應該是可讀的。由__repr__()返回的字符串是官方表示,應該是明確的(外層多了引號,長度是原來長度+2)。直接調用str()和repr()比直接使用_str__()和_repr__()要好。
缺省情況下使用str函數,但可以使用!r標識明確調用repr:
>>> f"{new_comedian}" 'Eric Idle is 74.' >>> f"{new_comedian!r}" 'Eric Idle is 74. Surprise!'
我們可以格式化多行字符串:
>>> 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}.'
我們看到沒有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'
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
看完上述內容,你們掌握如何在Python3中使用f-Strings格式化字符串的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。