比較 Python 的格式化字串 — %-formatting、str.format()、 f-string
%-formatting、str-format(Python 2.6+)、f-string (Python 3.6+)
一、%-formatting
最早 Python 的格式化字串(format string)是用與 C 語言類似的 %-formatting,透過%
運算符號,將在元組(tuple)中的一組變量依照指定的格式化方式輸出。如 %s
(字串)、 %d
(十進位整數)、 %f
(浮點數):
但這種輸出方式並不適合有很多變量的情況,容易搞錯也不易讀,如:
I am %s %s. %s
就完全不知道 %s
個別代表是什麼意思,需要配合參數才能知道用途:
二、str.format()
2008 發布的 Python 2.6 開始有新的格式化字符函數 str.format(),透過 {}
和 format 來代替 %
運算符號,如我們可以將上面例子的:
s = 'I am %s %s. %s'
重寫為:
s = 'I am {first_name} {middle_name}. {last_name}'
然後透過 format 來帶入值:
s.format(first_name='Monkey', middle_name='D', last_name='Luffy')
有沒有比之前容易讀一點呢:)?但是,這也會導致接變量後 format 會變長:
str.format() 除了可以指定格式化變量的名稱外,也可以透過^
(居中)、<
(向左對齊)、>
(向右對齊)等方式調整輸出樣式:
或是以 {:,}
的方式以逗號分隔數字:
更多 str.format() 支持的格式可參考:Python format 格式化函数
三、f-string
2016 發布的 Python 3.6 新增 f-string,可以解決 %-formatting 變量不易閱讀以及 str.format() 接變量後變超長的問題,如上面自介的例子:
# variables
first_name = "Monkey"
middle_name = "D"
last_name = "Luffy"# str.format()
"I am {first_name} {middle_name}. {last_name}".format(
first_name=first_name,
middle_name=middle_name,
last_name=last_name
)# Output: "I am Monkey D. Luffy"
可用 f-string 改成如下格式,就可以將之前的變量帶入並格式化輸出喔!:
# variables
first_name = "Monkey"
middle_name = "D"
last_name = "Luffy"# f-string
f"I am {first_name} {middle_name}. {last_name}"# Output: "I am Monkey D. Luffy"
有木有比較清爽一點?再一個例子比較三個方法的可讀性:
覺得 f-string 有沒有比較容易閱讀呢:)?而且 f-string 執行速度比 str.format()、%s 還快呢!但要注意的是 f-string 不能像 %-string、str.format() 一樣,可以先將 template 賦值給變量再格式化輸出:
以上是 %-string、str.format()、f-string 的使用方法比較。