>>> from env_helper import info; info()
页面更新时间: 2024-01-17 22:34:45
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-17-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

6.3. 格式化字符串

将值转换为字符串并设置其格式是一个重要的操作,需要考虑众多不同的需求, 因此随着时间的流逝,Python提供了多种字符串格式设置方法。 这里介绍的方法基本按时间顺序由前往后聘。

除了有多种方式,每种方式也有很多字符串格式设置选项。 一般情况下并不需要都掌握,学习常用的方法就可以。 尤其是使用较新版本的 Python ,目前推荐使用 F字符串的方法。

6.3.1. 用百分号

这种方法较早出现,应该是参考了 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 位小数的浮点数。

这种格式设置方法现在依然管用,且依然活跃在众多代码中,因此你很可能遇到。

6.3.2. 模板字符串

可能遇到 的另一种解决方案是所谓的模板字符串。它使用类似于UNIX shell的语法,旨在简化基本的格式设置机制,如下所示:

>>> from string import Template
>>> tmpl = Template("Hello, $who! $what enough for ya?")
>>> tmpl.substitute(who="Mars", what="Dusty")
'Hello, Mars! Dusty enough for ya?'

包含等号的参数称为关键字参数。在字符串格式设置中,可将 关键字参数视为一种向命名替换字段提供值的方式。

6.3.3. format() 方法

编写新代码时,应选择使用字符串方法 format ,它融合并强化了早期方法的优点。 使用这种 方法时,每个替换字段都用花括号括起,其中可能包含名称,还可能包含有关如何对相应的值进 行转换和格式设置的信息。

在最简单的情况下,替换字段没有名称或将索引用作名称。

>>> "{}, {} 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.'

6.3.4. F字符串

最后,在Python 3.6中,如果变量与替换字段同名,还可使用一种简写。在这种情况下,可 使用F字符串——在字符串前面加上 f

在这里,创建最终的字符串时,将把替换字段 e 替换为变量 e 的值。这与下面这个更明确一些的表达式等价:

>>> from math import e
>>> f"Euler's constant is roughly {e}."
"Euler's constant is roughly 2.718281828459045."