str.format 和 f-strings 將值格式化為字串
Python 通過版本 2.6 中引入的 str.format
函式和版本 3.6 中引入的 f-strings 提供字串插值和格式化功能。
給出以下變數:
i = 10
f = 1.5
s = "foo"
l = ['a', 1, 2]
d = {'a': 1, 2: 'foo'}
以下陳述都是等同的
"10 1.5 foo ['a', 1, 2] {'a': 1, 2: 'foo'}"
>>> "{} {} {} {} {}".format(i, f, s, l, d)
>>> str.format("{} {} {} {} {}", i, f, s, l, d)
>>> "{0} {1} {2} {3} {4}".format(i, f, s, l, d)
>>> "{0:d} {1:0.1f} {2} {3!r} {4!r}".format(i, f, s, l, d)
>>> "{i:d} {f:0.1f} {s} {l!r} {d!r}".format(i=i, f=f, s=s, l=l, d=d)
>>> f"{i} {f} {s} {l} {d}"
>>> f"{i:d} {f:0.1f} {s} {l!r} {d!r}"
作為參考,Python 還支援用於字串格式化的 C 樣式限定符。以下示例與上述示例相同,但由於靈活性,符號一致性和可擴充套件性,str.format
版本是首選版本:
"%d %0.1f %s %r %r" % (i, f, s, l, d)
"%(i)d %(f)0.1f %(s)s %(l)r %(d)r" % dict(i=i, f=f, s=s, l=l, d=d)
在 str.format
中用於插值的大括號也可以編號以減少格式化字串時的重複。例如,以下內容是等效的:
"I am from Australia. I love cupcakes from Australia!"
>>> "I am from {}. I love cupcakes from {}!".format("Australia", "Australia")
>>> "I am from {0}. I love cupcakes from {0}!".format("Australia")
雖然官方的 python 文件像往常一樣足夠徹底,但是 pyformat.info 有一組很好的例子和詳細的解釋。
此外,{
和 }
字元可以使用雙括號進行轉義:
"{'a': 5, 'b': 6}"
>>> "{{'{}': {}, '{}': {}}}".format("a", 5, "b", 6)
>>> f"{{'{'a'}': {5}, '{'b'}': {6}}"
有關其他資訊,請參閱字串格式 。在 PEP 3101中提出了 str.format()
,在 PEP 498 中提出了 f-strings。