- 译者序
- 前言
- 第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 各部分练习题的解答
- 作者介绍
- 封面介绍
字符串方法
更详细一点,函数也就是代码包,方法调用同时进行了两次操作(一次获取属性和一次函数调用):
属性读取
具有object.attribute格式的表达式可以理解为“读取object对象的属性attribute的值”。
函数调用表达式
具有函数(参数)格式的表达式意味着“调用函数代码,传递零或者更多用逗号隔开的参数对象,最后返回函数的返回值”。
将两者合并可以让我们调用一个对象方法。方法调用表达式对象,方法(参数)从左至右运行,也就是说Python首先读取对象方法,然后调用它,传递参数。如果一个方法计算出一个结果,它将会作为整个方法调用表达式的结果被返回。
通过本书这一部分的介绍可知,绝大多数对象都有可调用的方法,而且所有对象都可以通过同样的方法调用的语法来访问。为了调用对象的方法,必须确保这个对象是存在的。
表7-3概括了Python 3.0中内置字符串对象的方法及调用模式;这些经常有变化,因此,确保查看Python的标准库手册以获取最新的列表,或者在交互模式下在任何字符串上调用help。Python 2.6的字符串方法变化很小,例如,它包含一个decode,因为它对Unicode数据的处理有所不同(我们将在本书第36章中讨论Unicode数据)。在这个表中,S是一个字符串对象,并且可选的参数包含在方括号中。这个表中的字符串方法实现了分隔和连接、大小写转换、内容测试、子字符串查找和替换这样的高级操作。
正如你所看到的,确实有一些字符串方法,我们没有足够的篇幅全部介绍,参见Python的库手册或参考文献来了解所有的细节。为了帮助你入门,让我们来看一些展示了最常用的方法的代码,并随之介绍Python文本处理的一些基础知识。
字符串方法实例:修改字符串
我们知道字符串是不可变的,所以不能在原处直接对其进行修改。为了在已存在的字符串中创建新的文本值,我们可以通过分片和合并这样的操作来建立新的字符串。举个例子,为了替换一个字符串中的两个字符,你可以如下代码来完成:
但是,如果仅为了替换一个子字符串的话,那么可以使用字符串的replace方法来实现:
replace方法比这一段代码所表现的更具有普遍性。它的参数是原始子字符串(任意长度)和替换原始子字符串的字符串(任意长度),之后进行全局搜索并替换:
鉴于这样的角色,replace可以当作实现模板(例如,一定格式的信件)替换的工具来使用。注意到这次我们直接打印了结果而不是赋值给一个变量名——只有当你想要保留结果为以后使用的时候才需要将它们赋值给变量名。
如果需要在任何偏移时都能替换一个固定长度的字符串,可以再做一次替换,或者使用字符串方法find搜索的子字符,之后使用分片:
find方法返回在子字符串出现处的偏移(默认从前向后开始搜索)或者未找到时返回-1。如同我们在前面所见到的,这就像是in表达式中的一次子字符串查找操作,但是,find返回的是所找到的字符串的位置:
注意replace每次返回一个新的字符串对象。由于字符串是不可变的,因此每一种方法并不是真正在原处修改了字符串,尽管"replace"就是“替换”的意思!
合并操作和replace方法每次运行会产生新的字符串对象,实际上利用它们去修改字符串是一个潜在的缺陷。如果你不得不对一个超长字符串进行许多的修改,为了优化脚本的性能,可能需要将字符串转换为一个支持原处修改的对象。
内置的list函数(或一个对象构造函数调用)以任意序列中的元素创立一个新的列表——在这个例子中,它将字符串的字符“打散”为一个列表。一旦字符串以这样的形式出现,你无需在每次修改后进行复制就可以对其进行多次修改:
修改之后,如果你需要将其变回一个字符串(例如,写入一个文件时),可以用字符串方法join将列表“合成”一个字符串:
可能第一眼看上去连接方法有些陌生。因为它是用于字符串的方法(并非用于列表),是通过设定的分隔符来调用。join将列表字符串连在一起,并用分隔符隔开。这个例子中使用一个空的字符串分隔符将列表转换为字符串。一般地,对任何字符串分隔符和可迭代字符串都会是这样的结果:
实际上,像这样一次性连接子字符串比单独地合并每一个要快很多。请确保阅读了前面关于Python 3.0和Python 2.6中可变的bytearray字符串的提示,第36章还将详细介绍。由于有些情况下它会改变,它还为这种列表/连接合并操作提供了一种替换,以针对某些必须经常修改的文本。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论