文章目录
- Unicode简介
- 字符串基础
- 字符串字面量
- 单引号与双引号
- 转移序列
- 原始字符阻止转义
- 双反斜杠阻止转义
- 三引用字符串
- 字符串的操作
- 运算符号
- 索引和分片
- 转换工具
- 字符串代码转换
- 修改字符串 I
- 字符串方法
- 方法调用语法
- 修改字符串 II(字符串方法示例)
- 解析文本
- 字符串格式化表达式
- 格式化表达式基础
- 高级格式化表达式语法
- 字符串格式化方法调用
- 字符串格式化方法基础
- 添加键、属性和偏移量
- 高级格式化语法
- 通用类型分类
- 同一类型中的类型 共享同一操作集
- 可变类型能够在原位置修改
Unicode简介
- 在Python3.x中,有三种字符串类型:str用于Unicode文本(包括ASCII),bytes用于二进制(包括已编码的文本),而bytearray是bytes的一个修改的变体。文本在两种模式下工作:文本,他讲内容表示为str类型并实现Unicode编码;二进制,它以原始bytes的形式处理,且不做任何数据转换。
- Unicode具体内容于之后详解
字符串基础
字符串字面量
单引号与双引号
在Python字符串周围,单引号可以和双引号互换。两种形式同样有效,且返回相同类型的对象。
转移序列
反斜杠 \用来引用特殊的字符编码,称为转义序列。转义序列让我们能够在字符串嵌入不容易通过键盘输入的字符。
原始字符阻止转义
当字母 R或r 出现在字符串第一引号的前面,它将会关闭转义机制,结果是Python会将反斜杠作为字面量来保存。
双反斜杠阻止转义
实际上双反斜杠是一个反斜杠的转义序列,所以可以直接编写两个反斜杠来保留反斜杠来阻止转义。
三引用字符串
Python可以使用单引号或者双引号,这种形式以三个引号开始,并紧跟任意行数的文本,并且以与开头相同的三个引号结尾。Python会把在三引号内的所有文本收集到一个单独的多行字符串中,并在代码转折处嵌入换行字符(\n),输出什么就得到什么。要查看字符串,打印它。注意—三引用字符串会保留所有保留的文本,包括你认为是注释的文本。
字符串的操作
运算符号
-‘+’运算符可以用于拼接两个字符串, * 运算符可以重复字符串
- [ ]运算符通过索引获取字符串中字符
- [ : ]运算符截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的
- in 成员运算符 - 如果字符串中包含给定的字符返回 True
- not in 成员运算符 - 如果字符串中不包含给定的字符返回 True
- r/R 原始字符串,所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
- % 格式字符串
索引和分片
- 字符串被定义为 字符的有序集合,所以能通过位置访问它们的元素。Python中字符是通过索引来获取的。
- Python与C语言类似,偏移量从0开始,同时Python还支持负偏移量。
- 索引(S[ i ])获取特定偏移量的元素:
1、第一个元素的偏移量为0
2、负偏移量意味着从结尾或右端反向进行计数。
3、S[ 0 ]获取第一个元素
4、S[ -2 ] 获取倒数第二个元素 - 分片 (S[ i:j ]提取序列的连续部分:
1、遵循左闭右开原则,上边界不包含在内
2、分片的下边界和上边界,在缺省时默认为0和序列的长度
3、S[1:3]获取从偏移量为1直到但是不包括偏移量为3之间的所有元素
4、S[1: ]获取从偏移量为1直到末尾(序列长度)之间的所有元素
5、S[ :3]获取从偏移量为0直到但是不包括偏移量为3之间的所以元素
6、S[ :-1]获取从偏移量为0直到但是不包括最后一个元素之间的所有元素
7、S[ : ]获取从偏移量为0直到末尾之间的所有元素——实现了对S的顶层复制
8、允许跳过元素和反转顺序 - 拓展分片-第三个可选索引值 步长(步幅)
1、X[ i:j:k],它表示:“提取对象中的所有元素,从偏移量 i 直到但是不包括偏移量 j ,每隔k个元素索引一次”
2、第三个限制 k ,默认值为+1。若明确指定一个值,那就能使用第三个限制去跳过某些元素或反转它们的顺序。
3、使用负数步长,前两个边界的意义实际进行反转。即反转或跳跃索引。
转换工具
- Python中字符串不能相加字符串和数字
- int/float函数:将字符串转为数字
- str函数:将数字转为字符串表示
字符串代码转换
- ord函数:返回用来表示内存中相应字符的实际二进制值(底层整数码-ASCII字节值)
- chr函数:获取整数码并将其转换为对应的字符
修改字符串 I
- 字符串在Python中为不可变序列
- 修改方法:拼接、分片。
字符串方法
字符串提供一系列实现更复杂的文本处理任务的方法
方法调用语法
- 属性获取:具有object.attribute形式的表达式理解为“获取对象(object)中(attribute)属性的值”
- 调用表达式:具有**function(arguments)**形式的表达式可以理解为“调用函数(function)的代码”,向其传递零个或多个逗号分隔的参数arguments对象,并且返回函数function的结果值。”
- 方法调用表达式:object.method(arguments):从左到右进行求值——Python首先读取对象(object)的方法(method),然后调用它,传递进对象(object)的参数(arguments)。简单来说即为:使用参数调用方法来处理对象。
修改字符串 II(字符串方法示例)
- replace方法:替换一个子字符串
object(字符串).replace(arguments) 参数是由最初子串(任意长度)和替换最初子串的字符串(任意长度)。之后进行全局搜索并替换。
>>> x = 'aa$bb$cc$dd'.replace('$','SPAM')
>>> x = 'aaSPAMbbSPAMccSPAMdd'
- find方法:返回搜索子串出现的偏移量
object(字符串).find(arguments)
>>> S = 'xxxxSPAMxxxxSPAMxxxx'
>>> where = S.find('SPAM')
>>> where
>>> 4
>>> S = S[:where]+'EGGS'+S[(where+4):]
>>> S
>>> 'xxxxEGG5XXXXSPAMXXXX'
- list函数:将字符串转换成一个支持原位置修改的对象—列表,支持任意位置修改。
>>> S = 'spammy'
>>> L = list(s)
>>> L
['s','p','a','m','m','y']
>>>
>>> L[3] = 'x'
>>> L[4] = 'x'
>>> L
['s','p','a','x','x','y']
- join方法:将列表合并成一个字符串。object(字符串).join(arguments参数为要合并的列表。
>>> S = ''.join(L)
>>> S
'spaxxy'
解析文本
- split方法:字符串中的split方法,将一个字符串从分隔符处切成一系列子串并生成子串列表。
object(字符串).split(arguements)
- 参数
1、空白 即默认的分隔符为空白——这个字符串被一组或多个空格、制表符、换行符所分割,生成得到的子串列表。
2、使用具体的字符串类型分隔符填充
>>>line = 'aaa bbb ccc'
>>>cols = line.split()
>>>cols
['aaa','bbb','ccc']
>>>line = 'bbb,hacker,40'
>>>line.split(',')
['bbb','hacker','40']
>>>line = "i'mSPAMaSPAMlumberjack"
>>>line.split.("SPAM")
["i'm",'a','lumberjack']
字符串格式化表达式
格式化表达式基础
- 格式化字符串
1、在%运算符左侧放置一个需要进行格式化的字符串,这个字符串带有一个或多个内嵌的转换目标,都以%开头。
2、再运算符右侧放置一个(或多个,内嵌在元组中的对象),这些对象将会插入到你想让Python进行格式化的左侧的字符串,并替换一个(或多个)转换目标。
>>>'That is %d %s bird!'%(1,'dead')
That is 1 dead bird!
>>> exclamation = 'Ni'
>>>'The knights who says %s!'%exclamation
The knights who says Ni!
高级格式化表达式语法
- 表达式左侧转换目标的一般结构
%[(keyname)][flags][width][.precision]typecode(类型码)
1、为索引在表达式右侧使用的词典提供键的名称
2、罗列说明格式标签,如左对齐(-),数值符号(+)·······
3、为被替换的文本给出总的最小字段宽度
4、为浮点数字设置精度 - 字符串格式化同时也允许左边的转换目标引用右边编写的词典中的键来提取对应的值。
>>>'%(qty)d more %(food)s' %{'qty':1,'food':'spam'}
'1 more spam'
字符串格式化方法调用
字符串格式化方法基础
- 使用主体字符串作为模板,并接受任意多个参数,用来表示将要根据模板替换的值。
string.format()
- 主题字符串中,通过使用花括号 { } 来指定替换目标和即将插入的参数 ’ {} '.format()
- format创建并返回一个新的字符串对象,因为字符串是不可变的。
>>>x = '{motto},{0} and {food}'.format(42,motto=3.14,food=[1,2])
>>>x
['3.14,42','[1,2]']
添加键、属性和偏移量
- 格式化字符串可以指定对象的属性和字典键
- 格式化字符串中的方括号可以指定列表的偏移量来执行索引,但只有单个正偏移量才在格式化字符串语法中有效。要指定负偏移量或分片,或者使用任意表达式结果,必须在格式化字符串自身以外运行表达式。
>>>somelist=['S','M','A','M']
>>>'first={0=[0]},third={0[2]}'.format(somelist)
'first=S,third=A'
>>>'first={0},last={1}'.format(somelist[0],somelist[-1])
'first=S,last=M'
>>>parts = somelist[0],somelist[-1],somelist[1:3}
>>>'first={0},last={1},middle={2}'.format(*parts)
'first=S,last=M,middle=['P','A']'
高级格式化语法
- 在可能空的替换目标的标识码 { } 之后使用一个冒号,后面跟着可以指定字段大小、对齐方式和特定类型编码的格式化说明符——四个部分均可选,中间必须不带有空格。
- 形式化结构:
{*fieldname component !conversionflag : formatspec*}
- fieldname 是辨识参数的一个可选数字或关键词,可以省略以使用相对参数编号。
省略不写 {}
数字 {十进制非负整数}
变量名 {合法的Python标识符} - component 是有着大于等于零个”.name"或“[index]”引用的字符串,可以被省略以使用完整的参数值。其中的引用用来获取参数的属性或索引值
- conversionflag 如果出现则以 !开始,后面跟着 r,s或者a,在这个值上分别调用repr、str、或ascii内置函数
- formatspec如果出现则以 :开始,后面跟着文本,指定如何表示该值,包括字段宽度、对齐方式、补零、小数精度等细节,并以一个可选的数据类型码结束。
- formatspec组件格式:
[[fill]align][sign][#][0][width][,][.precision][typecode]
方括号表示可选组件,实际编写可以不添加
1、fill可以是除{或}之外的任意填充字符
2、align可以是 <,>,+或^,分别表示左对齐,右对齐,符号字符后的填充,或局中对齐
3、sign可以是+,-,或空格
4、而,(逗号)选项请求一个逗号表示千位分隔符
5、width表示字段宽度
6、.precision表示小数精度
7、typecode与%表达式中相重叠
通用类型分类
对于内置类型,对处于同一分类的类型的操作,运行起来都是一样的,大多数概念都只需要定义一次
同一类型中的类型 共享同一操作集
- 数字(整数,浮点数,小数,分数等)
支持加法和乘法等 - 序列(字符串,列表,元组)
支持索引,分片和拼接等。 - 映射(字典)
支持按键名称的索引等 - 他们在通用“字符串”标签下,这些操作运行起来就和任意序列对象一样
可变类型能够在原位置修改
- 不可变类别(数字,字符串,元组,不可变集合)
都不支持原位置修改,但可以运行表达式创建新对象,并将返回的结果分配给变量 - 可变类别(列表,字典,集合,字节数组)
可以通过不生成新对象的操作在原位置修改,而不用创建新对象。