第七章、字符串
Python字符串——一个有序的字符的集合,用来存储和表现基于文本的信息。
字符串常量
1、单双引号字符串是一样的:
在Python字符串中,单引号和双引号字符是可以互换的。
2、用转义序列代表特殊字节:
反斜杠用来引入特殊的字节编码,是转义序列。
3、raw字符串抑制转义:
如果字母r(大写或小写)出现在字符串的第一个引号的前面,它会关闭转义机制。
4、三重引号编写多行字符串块:
Python还有一种三重引号内的字符串常量格式,有时候称作块字符串,这是一种对编写多行文本数据来说很便捷的语法。
实际应用中的字符串
1、基本操作:
2、索引和分片:
因为将字符串定义为字符的有序集合,所以我们能够通过其位置获得它们的元素。
扩展分片:
在Python2.3中,分片表达式增加了一个可选的第三个索引,用作步进(有时称为是stride)。
3、字符串转换工具:
int函数将字符串转换为数字,而str函数将数字转换为字符串表达式(实际上,它看起来和打印出来的效果是一样的)。repr函数(以及之前的反引号表达式,在Python3.0中删除了)也能够将一个对象转换为字符串形式,然后这些返回的对象将作为代码的字符串,可以重新创建对象。
①、字符串代码转换:
单个的字符可以通过将其传给内置的ord函数转换为其对应的ASCII码——这个函数实际上返回的是这个字符在内存中对应的字符的二进制值。而chr函数将会执行相反的操作,获取ASCII码并将其住转化为对应的字符。
4、修改字符串:
若要改变一个字符串,需要利用合并、分片这样的工具来建立并赋值给一个新的字符串,倘若必要的话,还要将这个结果赋值给字符串最初的变量名。
同样可以通过像replace这样的字符串方法来实现。
可以通过字符串格式化表达式来创建新的文本值。
字符串方法
除表达式运算符之外,字符串还提供了一系列的方法去实现更复杂的本文处理任务。
1、字符串方法实例:修改字符串:
①、为了在已存在的字符串中创建新的文本值,我们可以通过分片和合并这样的操作来建立新的字符串。
②、如果仅为了替换一个字符串的话,那么可以使用字符串的replace方法来实现。
③、内置的list函数(或一个对象构造函数调用)以任意序列中的元素创立一个新的列表。一旦字符串以这样的形式出现,你无需在每次修改后进行复制就可以对其进行多次修改。修改之后,,如果你需要将其变回一个字符串(例如,写入一个文件时),可以用字符串方法join将列表“合成”一个字符串。
2、字符串方法实例:文本解析:
字符串方法的常规角色是以简单的文本分析的形式出现的——分析结构并提取子串。
字符串的split方法将一个字符串分割为一个子串的列表,以分隔符字符串为标准。
3、实际应用中的其他常见字符串方法
与字符串方法相比,其他的技术有时也能够达到相同的结果——例如,成员操作符in能够用来检测一个子字符串是否存在,并且length和分片操作能够用来做字符串末尾的检测。
字符串格式化方法format,它提供了更高级的替换工具,在一个单个的步骤中组合多个操作。
4、最初的字符串模块(在Python3.0中删除):
字符串格式化表达式
①、如今的Python中的字符串格式化可以以两种形式实现:
字符串格式化表达式:
这是从Python诞生的时候就有的最初的技术;这是基于C语言的“printf”模型,并且在大多数现有的代码中使用。
字符串格式化方法调用:
这是Python2.6和Python3.0新增加的技术,这是Python独有的方法,并且和字符串格式化表达式的功能有很大的重叠。
②、格式化字符串:
1.在%操作符的左侧位置放置一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都以%开头(例如,%d)。
2.在%操作符右侧放置一个(或多个,嵌入到元组中)对象,这些对象将会插入到左侧想让Python进行格式化字符串的一个(或多个)转换目标的位置上去。
③、格式化总是会返回新的字符串作为结果而不是对左侧的字符串进行修改。
1、更高级的字符串格式化表达式:
转换目标的通用结构看上去是这样的:
%[(name)][flags][width][.precision]typecode。
2、基于字典的字符串格式化:
字符串的格式化同时也允许左边的转换目标来引用右边字典的键来提取对应的值。
字符串格式化调用方法
1、基础知识:
简而言之,Python2.6和Python3.0(及其以后版本)中的新的字符串对象的format方法使用主体字符串作为模板,并且接受任意多个表示将要根据模板替换的值的参数。在主体字符串中,花括号通过位置指出替换目标及将要插入的参数。
2、添加键、属性和偏移量:
格式化字符串可以指定对象属性和关键字——就像在常规的Python语法中一样,方括号指定字典键,而点表示位置或关键字所引用的一项对象属性。
格式化字符串中的方括号可以指定列表(及其他的序列)偏移量以执行索引,但是,只有单个的正的偏移才能在格式化字符串的语法中有效,因此,这一功能并不是像你想的那样通用。和%表达式一样,要指定负的偏移或分片,或使用任意表达式,必须在格式化字符串自身之外运行表达式。
3、添加具体格式化:
另一种和%表达式类似的是,可以在格式化字符串中添加额外的语法来实现更具体的层级。
如下是可以在一个格式化字符串中作为替代目标出现的形式化结构:
{fileIDname!conversionflag:formatspec}
冒号后的formatspec组成形式上的描述如下(方括号表示可选的组成,并且不能编写为常量):
[fill[align][sign][#][0][width][.precision][typecode]
4、与%格式化表达式比较:
5、为什么用新的格式化方法:
拥有%表达式所没有的一些额外功能。
可以更明确地进行替代值引用。
考虑到操作符会有一个更容易记忆的方法名。
不支持用于单个和多个替代值大小写的不同语法。
①、额外功能:
方法调用支持表达式所没有的一些额外功能,例如二进制类型编码和千分位分组。
②、显示值引用:
③、方法名和通用参数:
有了Python3.1的这一自动技术修改,格式化方法唯一明确保留的潜在优点就是它用一个更加便于记忆的格式化方法名替代了%操作符,并且不区分单个和多个替代值。
④、将来可能废弃:
通常意义下的类型分类
1、同样分类的类型共享其操作集合:
数字(整数、浮点数、二进制、分数等)
支持加法和乘法等。
序列(字符串、列表、元组)
支持索引、分片和合并等。
映射(字典)
支持通过键的索引等。
2、可变类型能够在原处修改:
不可变类型(数字、字符串、元组、不可变集合)
不可变的分类中没有哪个对象类型支持原处修改,尽管我们总是可以运行表达式来创建新的对象并将其结果分配给变量。
可变类型(列表、字典、可变集合)
相反,可变的类型总是可以通过操作原处修改,而不是创建新的对象。尽管这样的对象可以复制,但原处修改支持直接修改。
本章小结
本章,我们深入学习了字符串这个对象类型。我们学习了如何编写字符串常量,探索了字符串操作,包括序列表达式、字符串格式化以及字符串方法调用。在这个过程中,我们深入学习了各种概念,例如,分片、方法调用、三重引号字符串。我们也定义了一些关于变量类型的核心概念。例如,序列,它会共享整个操作的集合。