将值转换为字符串并设置其格式是一个重要的操作,需要考虑众多不同的需求, 因此随着时间的流逝,Python提供了多种字符串格式设置方法。 这里介绍的方法基本按时间顺序由前往后聘。
除了有多种方式,每种方式也有很多字符串格式设置选项。 一般情况下并不需要都掌握,学习常用的方法就可以。 尤其是使用较新版本的 Python ,目前推荐使用 F字符串的方法。
这种方法较早出现,应该是参考了 C 语言的方式。
使用字符串格式设置运算符 - 百分号 ( %
)。
这个运算符的行为类似于C语言中的经典函数 printf
:在 %
左边指定一个字 符串(格式字符串),
并在右边指定要设置其格式的值。
指定要设置其格式的值时,可使用单个值(如字符串或数字),可使用元组(如果要设置多个值的格式),
还可使用字典,其中最常见的是元组。
format = "Hello, %s. %s enough for ya?"
values = ('world', 'Hot')
format % values
'Hello, world. Hot enough for ya?'
上述格式字符串中的 %s
称为转换说明符,指出了要将值插入什么地方。
s
意味着将值视为字符串进行格式设置。
如果指定的值不是字符串,将使用 str
将其转换为字符串。
其他说明符将导致其他形式的转换。例如, %.3f
将值的格式设置为包含 3 位小数的浮点数。
from string import Template
tmpl = Template("Hello, $who! $what enough for ya?")
tmpl.substitute(who="Mars", what="Dusty")
'Hello, Mars! Dusty enough for ya?'
包含等号的参数称为关键字参数。在字符串格式设置中,可将 关键字参数视为一种向命名替换字段提供值的方式。
在最简单的情况下,替换字段没有名称或将索引用作名称。
"{}, {} and {}".format("first", "second", "third")
'first, second and third'
"{0}, {1} and {2}".format("first", "second", "third")
'first, second and third'
然而,索引无需像上面这样按顺序排列。
"{3} {0} {2} {1} {3} {0}".format("be", "not", "or", "to")
'to be or not to be'
命名字段的工作原理与预期的完全相同。
from math import pi
"{name} is approximately {value:.2f}.".format(value=pi, name="π")
'π is approximately 3.14.'
当然,关键字参数的排列顺序无关紧要。在这里还指定了格式说明符 .2f
,并使用冒号将其与字段名隔开。
它意味着要使用包含2位小数的浮点数格式。如果没有指定 .2f
,结果将如下:
"{name} is approximately {value}.".format(value=pi, name="π")
'π is approximately 3.141592653589793.'
在这里,创建最终的字符串时,将把替换字段 e
替换为变量 e
的值。
这与下面这个更明确一些的表达式等价:
from math import e
f"Euler's constant is roughly {e}."
"Euler's constant is roughly 2.718281828459045."