Python 字符串格式化
于 2020 年 1 月 7 日更新
format()
方法允许您以任何所需的方式格式化字符串。
语法: template.format(p1, p1, .... , k1=v1, k2=v2)
模板是一个包含格式代码的字符串,format()
方法使用它的参数替换每个格式代码的值。 例如:
>>> 'Sam has {0} red balls and {1} yellow balls'.format(12, 31)
{0}
和{1}
是格式代码。 格式代码{0}
替换为format()
的第一个参数,即12
,而{1}
替换为format()
的第二个参数,即31
。
预期输出:
Sam has 12 red balls and 31 yellow balls
对于简单的格式化,该技术是可以的,但是如果要在浮点数中指定精度怎么办? 对于这种情况,您需要了解有关格式代码的更多信息。 这是格式代码的完整语法。
语法: {[argument_index_or_keyword]:[width][.precision][type]}
type
可以与格式代码一起使用:
格式码 | 描述 |
---|---|
d |
用于整数 |
f |
用于浮点数 |
b |
用于二进制数 |
o |
八进制数 |
x |
八进制十六进制数 |
s |
用于字符串 |
e |
用于指数格式的浮点 |
以下示例将使事情更加清楚。
示例 1:
>>> "Floating point {0:.2f}".format(345.7916732)
在这里,我们指定精度的2
位,f
用于表示浮点数。
预期输出:
Floating point 345.79
示例 2:
>>> import math
>>> "Floating point {0:10.3f}".format(math.pi)
在这里,我们指定3
精度数字,10
表示宽度,f
表示浮点数。
预期输出:
Floating point 3.142
示例 3:
"Floating point pi = {0:.3f}, with {1:d} digit precision".format(math.pi, 3)
这里{1:d}
中的d
表示整数值。
预期输出:
Floating point pi = 3.142, with 3 digit precision
如果为整数ValueError
指定精度,则仅在浮点数的情况下才需要指定精度。
示例 5:
'Sam has {1:d} red balls and {0:d} yellow balls'.format(12, 31)
预期输出:
Sam has 31 red balls and 12 yellow balls
示例 6:
"In binary 4 is {0:b}".format(4) # b for binary, refer to Fig 1.1
预期输出:
In binary 4 is 100
示例 7:
array = [34, 66, 12]
"A = {0}, B = {1}, C = {2}".format(*array)
预期输出:
A = 34, B = 66, C = 12
示例 8:
d = {
'hats' : 122,
'mats' : 42
}
"Sam had {hats} hats and {mats} mats".format(**d)
预期输出:
Sam had 122 hats and 42 mats
format()
方法还支持关键字参数。
'Sam has {red} red balls and {green} yellow balls'.format(red = 12, green = 31)
请注意,在使用关键字参数时,我们需要在{}
内部使用参数,而不是数字索引。
您还可以将位置参数与关键字参数混合
'Sam has {red} red balls, {green} yellow balls \
and {0} bats'.format(3, red = 12, green = 31)
格式化字符串的format()
方法是一个非常新的方法,它是在 Python 2.6 中引入的。 您将在旧版代码中看到另一种古老的技术,它允许您使用%
运算符而不是format()
方法来格式化字符串。
让我们举个例子。
"%d pens cost = %.2f" % (12, 150.87612)
在这里,我们使用%
左侧的模板字符串。 我们使用%
代替格式代码的{}
。 在%
的右侧,我们使用元组包含我们的值。 %d
和%.2f
被称为格式说明符,它们以%
开头,后跟代表数据类型的字符。 例如,%d
格式说明符是整数的占位符,类似地%.2f
是浮点数的占位符。
因此,%d
被替换为元组的第一值,即12
,而%.2f
被替换为第二值,即150.87612
。
预期输出:
12 pens cost = 150.88
一些更多的例子。
示例 1:
新:
"{0:d} {1:d} ".format(12, 31)
旧:
"%d %d" % (12, 31)
预期输出:
12 31
示例 2:
New:
"{0:.2f} {1:.3f}".format(12.3152, 89.65431)
Old:
"%.2f %.3f" % (12.3152, 89.65431)
预期输出:
12.32 89.654
示例 3:
New:
"{0:s} {1:o} {2:.2f} {3:d}".format("Hello", 71, 45836.12589, 45 )
Old:
"%s %o %.2f %d" % ("Hello", 71, 45836.12589, 45 )
预期输出:
Hello 107 45836.13 45