Python 3.6 提供了一種新的字符串格式化方法:f-strings,不僅比其他格式化方式更易讀,更簡潔,更不容易出錯,而且它們也更快!
看完本文後,你將瞭解如何以及為何要使用 f-strings。
首先,我們先了解下現有的字符串格式化方法。
在 Python 3.6 之前,字符串格式化方法主要有兩種:%格式化 和 str.format()。下面我們簡單看下它們的使用方法,以及侷限。
1 %-格式化
% 格式化方法從 Python 剛開始時就存在了,堪稱「一屆元老」,但是 Python 官方文檔中並不推薦這種格式化方式:
1.1 如何使用 %格式化
一般使用方式,要插入多個變量的話,必須使用元組:
1.2 %格式化的缺陷
上面的代碼示例看起來還能讀,但是,一旦開始使用多個參數和更長的字符串,你的代碼將很快變得不那麼容易閱讀:
可以看出,這種格式化並不是很好,因為它很冗長並且容易導致錯誤,比如沒有正確顯示元組或字典。
不過還好我們還有 str.format()。
2 str.format()
Python 2.6 中引入了 str.format() 格式化方法:https://docs.python.org/3/library/stdtypes.html#str.format。
2.1 str.format() 的使用
str.format() 是對 %格式化 的改進,它使用普通函數調用語法,並且可以通過 __format__() 方法為對象進行擴展。
使用 str.format() 時,替換字段用大括號進行標記:
並且可以通過索引來以其他順序引用變量:
或者可以這樣:
從字典中讀取數據時還可以使用 **:
確實,str.format() 比 %格式化高級了一些,但是它還是有自己的缺陷。
2.2 str.format() 的缺陷
在處理多個參數和更長的字符串時仍然可能非常冗長,麻煩!看看這個:
3 f-Strings
還好,現在我們有了 f-Strings,它可以使得字符串格式化更加容易。
f-strings 是指以 f 或 F 開頭的字符串,其中以 {} 包含的表達式會進行值替換。
下面從多個方面看下 f-strings 的使用方法,看完後,我相信你會對「人生苦短,我用 Python」有更深地贊同~
3.1 f-Strings 使用方法
是不是很簡潔?!還有更牛叉的!
因為 f-strings 是在運行時計算的,那麼這就意味著你可以在其中放置任意合法的 Python 表達式,比如:
運算表達式
- 調用函數
還可以調用函數:
也可以直接調用內置函數:
在類中使用
多行 f-string
這裡需要注意,每行都要加上 f 前綴,否則格式化會不起作用:
4 速度對比
其實,f-string 裡的 f 也許可以代表 fast,它比 %格式化方法和 str.format() 都要快:
運行結果:
很明顯,f-string 是最快的,並且語法是最簡潔的,是不是迫不及待地要試試了?
5 注意事項
5.1 引號的處理
可以在字符串中使用各種引號,只要保證和外部的引號不重複即可。
以下使用方式都是沒問題的:
那如果字符串內部的引號和外部的引號相同時呢?那就需要 \ 進行轉義:
5.2 括號的處理
若字符串中包含括號 {},那麼你就需要用雙括號包裹它:
可以看出,使用三個括號包裹效果一樣。
當然,你可以繼續增加括號數目,看下有什麼其他效果:
額,那麼多括號,看著有點暈了...
5.3 反斜槓
上面說了,可以用反斜槓進行轉義字符,但是不能在 f-string 表達式中使用:
你可以先在變量裡處理好待轉義的字符,然後在表達式中引用變量:
5.4 註釋符號
不能在表達式中出現 #,否則會報出異常;
總結
經過以上的講解,是不是發現 f-string 非常簡潔實用、可讀性高,而且不易出錯,可以嘗試切換到 f-string 嘍~
f-string 也體現出了 Python 的奧義:
在學習Python的過程中會遇到很多問題,為了解決這些問題小編自己創了個QQ群813622576,在裡面大家可以一起交流學習,方便大家解決自己不懂的知識,讓大家一起進步,群內也有我自己整理的一些資源讓大家學習!
閱讀更多 sxyyw 的文章