在Python中,字符串可以用来做注释内容,以及使用字符串变量定义内容。字符串通常由单引号(')、双引号("),或者由3个单引号或3个双引号引起来的任意文本组成,并且引号必须成对出现。引起来的内容可以是任何字符,可以是英文,也可以是中文。
创建字符串很简单,为变量分配一个带引号的值即可。下面是正确的字符串定义示例。
str1='hello world' str2="python" str3='''python'''
下列代码演示字符串的使用,源代码见code\2\python_str.py。
1 strName='Life is short,you need Python' 2 print(strName)
代码的执行结果如下。
Life is short,you need Python
字符串的基本操作主要包括通过索引获取字符串中的字符、重复输出字符串、修改字符串和连接字符串。
定义如下所示的字符串。
str_name ="I Love Python"
字符串在计算机内存中的存储顺序如图2-7所示。
图2-7 字符串存储顺序
从图2-7中可以看到,字符串中的每一个字符都对应一个正向索引和一个负向索引,可以利用“[索引]”的方式来获取字符串对应的值,这种读取方式称为索引读取。字符串的索引可以从0开始,到字符串的最大长度-1;也可以从-1开始,到字符串的最大长度。
下列代码演示通过索引获取字符串中的字符,源代码见code\2\str_define.py。
1 str_name='I Love Python' 2 print(len(str_name)) 3 print(str_name[0]) 4 print(str_name[7]) 5 print(str_name[-13]) 6 print(str_name[-6])
代码的执行结果如下。
13 I P I P
其中,len()函数可以获取字符串的长度。通过索引方式获取字符串中的内容,可以使用正向索引,也可以使用负向索引,如str_name[7]和str_name[-6]得到同样的值“P”。
有时候需要对一个字符串重复输出多次,可以使用星号(*)。*代表重复操作。
下列代码演示重复输出字符串,源代码见code\2\str_repeat.py。
1 a='hello python' 2 print(a*3)
代码的执行结果如下。
hello python hello python hello python
在Python中,可通过字符串的切片方式对字符串进行修改。
下列代码演示错误的字符串修改方式,源代码见code\2\str_modify_err.py。
1 a='hello python' 2 a[1]='f'
代码的执行报错,如下所示。
Traceback (most recent call last): File "e:/book/code/2/str_modify.py", line 2, in <module> a[1]='f' TypeError: 'str' object does not support item assignment
大致的意思是,str对象不支持项目的赋值。无法对字符串的某一个字符直接进行修改。
下列代码演示使用切片方式修改字符串,源代码见code\2\str_modify.py。
1 a='I Love Python' 2 b=a[0:7]+"Life" 3 print(b)
代码的执行结果如下。
I Love Life
其中a[0:7]属于字符串的切片用法,将在2.9.3小节进行详细介绍。
连接两个字符串使用加号“+”进行操作。
下列代码演示字符串的连接,源代码见code\2\str_add.py。
1 a="hello" 2 b="python" 3 #用加号连接三个字符串 4 c=a+","+b 5 print(c)
代码的执行结果如下。
hello,python
当对多个字符串进行连接时,推荐使用join()函数,性能更好。join()函数会在后文详细介绍。
在Python中,当需要在字符串中使用一些特殊字符时,需要用到反斜线(\)表示的转义字符。Python中常见的转义字符如表2-2所示。
表2-2 常见的转义字符
下列代码演示转义字符的使用,源代码见code\2\python_trans1.py。
1 #制表符和换行符转义 2 print('Life\tIs\tShort\nI\tUse\tPython') 3 #单引号和双引号转义 4 print("单引号输出\'\n双引号输出\"")
代码的执行结果如下。
Life Is Short I Use Python 单引号输出' 双引号输出"
如果不想让转义字符生效,只想显示字符串原来的样子,就要用r或R来定义原始字符串。如对于一个Windows文件路径E:\book\code,若要原样输出,可以在字符串前面加字母“r”或“R”。
下列代码演示原样输出字符串,源代码见code\2\python_trans2.py。
1 print(r'E:\book\code') 2 print(R'E:\book\code')
代码的执行结果如下。
E:\book\code E:\book\code
在Python中,使用字符串切片来完成字符串截取操作。字符串切片指从字符串中取出相应的元素,组成新的字符串。
使用一对中括号、开始索引、结束索引以及可选的步长,可以定义一个切片。使用切片的语法格式如下。
字符串[开始索引:结束索引:步长]
其中,步长默认为正值,开始索引默认为0,结束索引默认为字符串长度+1。
如果步长为负值,则开始索引默认为-1,结束索引默认为字符串长度的负值。
步长默认为1。步长为正值,截取操作从开始索引从左往右走,称为正向索引;步长为负值,截取操作从开始索引从右往左走,称为负向索引。
步长的意义为定义跳过的长度。
具体字符串的切片索引详见图2-8。
图2-8 字符串的切片索引
切片的一些常见用法如下。
[:]指提取从开头到结尾的整个字符串。
[开始索引:]指从开始索引提取到结尾。
[:结束索引]指从开头提取到结束索引-1。
[开始索引:结束索引]指从开始索引提取到结束索引-1。
[开始索引:结束索引:步长]指从开始索引提取到结束索引-1,按照步长值进行字符提取。有时为了简化,会省略开始索引和结束索引。
下列代码演示字符串切片操作,源代码见code\2\str_slice.py。
1 str_name='I Love Python' 2 #长度为13 3 print(len(str_name)) 4 print(str_name[0:13]) 5 print(str_name[:]) 6 print(str_name[0:]) 7 str_name2='0123456789' 8 #逆序 9 print(str_name2[::-1]) 10 #步长为2,从开头到结尾,正向索引 11 print(str_name2[0::2]) 12 #反向索引 13 print(str_name2[-10::2])
代码的执行结果如下。
13 I Love Python I Love Python I Love Python 9876543210 02468 02468
在实际开发中,字符串可能变得很长,这就需要解决字符串跨越多行的问题。在不拆分字符串的前提下,可以使用三引号进行处理。
三引号在字符串赋值的情况下,通常用来处理字符串跨越多行的问题,可以大大提高长字符串的可读性。三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
下列代码演示三引号方法的使用,源代码见code\2\str_line.py。
sql= ''' create table test1(id int not null auto_increment primary key, username varchar(50),password varchar(50)) '''
代码的执行结果如下。
create table test1(id int not null auto_increment primary key, username varchar(50),password varchar(50))
这段操作数据库的赋值语句比较长,采用三引号来解决字符串跨越多行的问题,字符串不需要转义,也不需要拼接,还方便修改。