- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
字符串格式化表达式
字符串格式化表达式
这是从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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论