91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Python3中使用f-Strings格式化字符串

發布時間:2021-05-13 17:38:09 來源:億速云 閱讀:197 作者:Leah 欄目:開發技術

如何在Python3中使用f-Strings格式化字符串?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1. 舊式字符串格式化

在Python3.6之前,主要有兩種方式格式化字符串:%-格式化 和 str.format()。下面我們先了解它們的用法以及局限性。

1.1 %-格式化

這時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.'

上面兩個實例還比較好理解,但當使用多個參數,字符串變得很長時,可讀性會下降;因為冗長易導致錯誤,故不建議使用。

1.2. 使用 str.format()方法

這種較新的方式是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)對其解包,并使用鍵索引對應值,但是有更好的辦法進行處理。

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表達式,這可以實現漂亮的任務。

>>> 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!'

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}.'

我們看到沒有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是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。

看完上述內容,你們掌握如何在Python3中使用f-Strings格式化字符串的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙江县| 义马市| 漯河市| 社旗县| 石城县| 克东县| 泽库县| 湄潭县| 永修县| 泸水县| 民县| 嘉善县| 神木县| 荔波县| 五河县| 宣武区| 奉化市| 恩施市| 濮阳市| 长寿区| 揭阳市| 潮州市| 荣昌县| 蒙阴县| 广东省| 阳江市| 南阳市| 凤台县| 拜城县| 文山县| 民县| 资溪县| 左权县| 聂拉木县| 宣汉县| 天台县| 离岛区| 宁都县| 噶尔县| 长子县| 平塘县|