返回介绍

字符串格式化表达式

发布于 2024-01-29 22:24:17 字数 2996 浏览 0 评论 0 收藏 0

尽管已经掌握了所介绍的字符串方法和序列操作,Python还提供了一种更高级的方法来组合字符串处理任务——字符串格式化允许在一个单个的步骤中对一个字符串执行多个特定类型的替换。它不是严格必须的,但它很方便使用,特别是当格式化文本以显示给程序的用户的时候。由于Python世界中充满了很多新思想,如今的Python中的字符串格式化可以以两种形式实现:

字符串格式化表达式

这是从Python诞生的时候就有的最初的技术;这是基于C语言的"printf"模型,并且在大多数现有的代码中使用。

字符串格式化方法调用

这是Python 2.6和Python 3.0新增加的技术,这是Python独有的方法,并且和字符串格式化表达式的功能有很大重叠。

由于方法调用是很新,其中的某些或另外一些可能会随着时间的推移而废弃。表达式更有可能在以后的Python版本中废弃,尽管这应该取决于真正的Python程序员未来的实际使用情况。然而,由于它们很大程度上只是同一个方案的变体,现在这两种技术都是有效的。既然字符串格式化表达式是最初的方法,让我们从它开始。

Python在对字符串操作的时候定义了%二进制操作符(你可能还记得它在对数字应用时,是除法取余数的操作符)。当应用在字符串上的时候,%提供了简单的方法对字符串的值进行格式化,这一操作取决于格式化定义的字符串。简而言之,%操作符为编写多字符串替换提供了一种简洁的方法,而不是构建并组合单个的部分。

格式化字符串:

1.在%操作符的左侧放置一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都以%开头(例如,%d)。

2.在%操作符右侧放置一个(或多个,嵌入到元组中)对象,这些对象将会插入到左侧想让Python进行格式化字符串的一个(或多个)转换目标的位置上去。

例如,在上一个格式化示例中,整数1替换在格式化字符串左边的%d,字符串'dead'替换%s。结果就得到了一个新的字符串,这个字符串就是这两个替换的结果:

从技术上来讲,字符串的格式化表达式往往是可选的——通常你可以使用多次的多字符串的合并和转换达到类似的目的。然而格式化允许我们将多个步骤合并为一个简单的操作,这一功能相当强大,我们多举几个例子来看一看:

在第一个例子中,在左侧目标位置插入字符串'Ni',代替标记%s。在第二个例子中,在目标字符串中插入三个值。需要注意的是当不止一个值待插入的时候,应该在右侧用括号把它们括起来(也就是说,把它们放到元组中去)。%格式化表达式操作符在其右边期待一个单独的项或者一个或多个项的元组。

第三个例子同样是插入三个值:一个整数、一个浮点数对象和一个列表对象。但是注意到所有目标左侧都是%s,这就表示要把它们转换为字符串。由于对象的每个类型都可以转换为字符串(打印时所使用的),每一个与%s一同参与操作的对象类型都可以转换代码。正因如此,除非你要做特殊的格式化,一般你只需要记得用%s这个代码来格式化表达式。

另外,请记住格式化总是会返回新的字符串作为结果而不是对左侧的字符串进行修改;由于字符串是不可变的,所以只能这样操作。如前所述,如果需要的话,你可以分配一个变量名来保存结果。

更高级的字符串格式化表达式

对更高级的特定类型的格式化来说,你可以在格式化表达式中使用表7-4列出的任何一个转换代码。它们中的大部分都是C语言程序员所熟知的,因为Python字符串格式化支持C语言中所有常规的printf格式的代码(但是并不像printf那样显示结果,而是返回结果)。表中的一些格式化代码为同一类型的格式化提供了不同的选择。例如,%e、%f和%g都可以用于浮点数的格式化。

事实上,在格式化字符串中,表达式左侧的转换目标支持多种转换操作,这些操作自有一套相当严谨的语法。转换目标的通用结构看上去是这样的:

表7-4中的字符码出现在目标字符串的尾部,在%和字符码之间,你可以进行以下的任何操作:放置一个字典的键;罗列出左对齐(-)、正负号(+)和补零(0)的标志位;给出数字的整体长度和小数点后的位数等。width和percision都可以编码为一个*,以指定它们应该从输入值的下一项中取值。

有关格式化目标的语法在Python的标准手册中都有完整的介绍,不过在这里,我们还是针对一般的用法举几个例子。下面这个例子首先是对整数进行默认格式化,随后进行了6位的左对齐格式化,最后进行了6位补零的格式化:

%e、%f和%g格式对浮点数的表示方法有所不同,正如下面的交互模式下所显示的那样(%E和%e相同,只不过指数是大写表示的):

对浮点数来讲,通过指定左对齐、补零、正负号、数字位数和小数点后的位数,你可以得到各种各样的格式化结果。对于较简单的任务来说,你可以通过利用简单的格式化表达式进行字符串转换或者我们早先提到的str内置函数来完成:

如果在运行的时候才知道大小,你可以在格式化字符串中用一个*来指定通过计算得出width和precision,从而迫使它们的值从%运算符右边的输出中的下一项获取,在这里,元组中的4指定为precision:

如果你对这一功能感兴趣,可以自行体验这些例子和操作以了解更多信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文