3.1 字符串基本操作
3.2 设置字符串的格式:精简版
如果你是Python编程新手,可能不会用到所有的Python字符串格式设置选项,因此这里介绍精简版。如果你想了解详情,请参阅接下来的3.3节,否则只需阅读本节,再直接跳到3.4节。
将值转换为字符串并设置其格式是一个重要的操作,需要考虑众多不同的需求,因此随着时间的流逝, Python提供了多种字符串格式设置方法。以前,主要的解决方案是使用字符串格式设
置运算符——百分号。这个运算符的行为类似于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位小数的浮点数。
这种格式设置方法现在依然管用,且依然活跃在众多代码中,因此你很可能遇到。可能遇到的另一种解决方案是所谓的模板字符串。它使用类似于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章将详细介绍这个术语。在字符串格式设置中,可将关键字参数视为一种向命名替换字段提供值的方式。
编写新代码时,应选择使用字符串方法format,它融合并强化了早期方法的优点。使用这种方法时,每个替换字段都用花括号括起,其中可能包含名称,还可能包含有关如何对相应的值进行转换和格式设置的信息。
在最简单的情况下,替换字段没有名称或将索引用作名称。
>>> "{}, {} and {}".format("first", "second", "third")
'first, second and third'
>>> ", and ".format("first", "second", "third")
'first, second and third'
然而,索引无需像上面这样按顺序排列。
>>> " ".format("be", "not", "or", "to")
'to be or not to be'
命名字段的工作原理与你预期的完全相同。
>>> from math import pi
>>> " is approximately .".format(value=pi, name="π")
'π is approximately 3.14.'
当然,关键字参数的排列顺序无关紧要。在这里,我还指定了格式说明符.2f,并使用冒号将其与字段名隔开。它意味着要使用包含2位小数的浮点数格式。如果没有指定.2f,结果将如下:
>>> " is approximately .".format(value=pi, name="π")
'π is approximately 3.141592653589793.'
最后,在Python 3.6中,如果变量与替换字段同名,还可使用一种简写。在这种情况下,可使用f字符串——在字符串前面加上f。
>>> from math import e
>>> f"Euler's constant is roughly ."
"Euler's constant is roughly 2.718281828459045."
在这里,创建最终的字符串时,将把替换字段e替换为变量e的值。这与下面这个更明确一些的表达式等价:
>>> "Euler's constant is roughly .".format(e=e)
"Euler's constant is roughly 2.718281828459045.
领取专属 10元无门槛券
私享最新 技术干货