字符串是一个包含其他对象的有序序列,用‘’或“”括起来,每一个元素根据他们的相对位置进行存储和读取。字符串具有不可变性——字符串所包含的字符存在从左到右的位置顺序,不能原位置改变,即不能对某一位置进行赋值而改变字符串。
例如1-1:
>>> S = 'python'
>>> S
'python'
>>> S[0] # 获取字符串的第一个元素
'p'
>>> S[0] = 'a' # 不能对第一个位置的元素重新赋值
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: 'str' object does not support item assignment
字符串的修改方法将在后面介绍到。
字符串可以包含在一对单引号(‘ ‘)或一对双引号(“ “)中,两者形式同样有效,并返回相同类型的对象。
例如1-2:
>>> a = 'python'
>>> b = "python"
>>> a
'python'
>>> b
'python'
单引号和双引号也可以同时使用。
例如1-3:
>>> 'He said "What a nice day"'
'He said "What a nice day"'
而如下的例子1-4:
>>> 'Let's go'
File "" , line 1
'Let's go'
^
SyntaxError: invalid syntax
解释器报错,是因为‘Let‘构成了一个字符串,Python不知道该如何处理剩下的部分(s go’ 不是python能识别的数据类型)。
同样,例子1-5:
>>> "He said "What a nice day""
File "" , line 1
"He said "What a nice day""
^
SyntaxError: invalid syntax
无法得到和例1-3同样的结果,是因为Python将“He said "识别为一个字符串,剩下的部分无法被Python识别。
可以用如下办法解决(例1-6):
>>> 'Let\'s go'
"Let's go"
>>> "He said \"What a nice day\""
'He said "What a nice day"'
这里,涉及到了转义字符的方法。
转义字符指用反斜杠(\)引入的特殊字符。\以及字符串字面量中在\后面的一个或多个字符,在生成的字符串对象中会被单个字符做代替。转义的目的是使我们能够在字符串中嵌入不容易通过键盘输入的字符,例如换行,保留单引号,保留双引号等。
例如2-1:
>>> S = '1\t2\n3'
>>> S
'1\t2\n3' # 交互模式下以转义形式输出
>>> print(S) # print可以将其格式解释出来
1 2
3
其中,\n为单个字符,表示换行字符。类似的,\t表示为制表符,是一个字符,因此该字符串的字符数量为5,可用函数len()检查字符串长度
>>> len(S)
5
下表列出了Python中的常用转义字符序列
转义 | 意义 |
---|---|
\newline | 行的延续 |
\\ | 反斜杠(保留一个\) |
\’ | 单引号(保留’) |
\b | 退格,删除前一个字符 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\other | 不转义(\后的字符不是有效的转义编码) |
除此之外还有\xhh,\0,\ooo,\N,\uhhhh,\Uhhhhhhhh等。
使用转义序列可以方便我们在字符串中嵌入特殊字符,但有时会遇到一些问题。例如3-1,我们希望字符串中包含一个完整路径(D:\newdirector\newfile\test.txt)
>>> path = 'D:\newdirector\newfile\test.txt'
>>> print(path)
D:
ewdirector
ewfile est.txt
由于有转义符\n(换行)和\t(制表符)的存在,使得结果并不是我们想要的。
有两种解决方式:
第一种,对\本身进行转义(如下例3-2)
>>> path = 'D:\\newdirector\\newfile\\test.txt'
>>> print(path)
D:\newdirector\newfile\test.txt
第二种,采用原始字符串的方法,在字符串第一个引号前添加一个字母r,关闭转义机制,\将会被Python识别为一般的字符进行存储和读取。
>>> path = r'D:\newdirector\newfile\test.txt'
>>> print(path)
D:\newdirector\newfile\test.txt
但是需要注意的是,原始字符串不能以单个\结尾,即r‘…\’是错误的,可以通过拼接‘\’,在末尾添加一个\(如下例3-3)。
>>> path = r'D:\newdirector\newfile\test.txt\'
File "" , line 1
path = r'D:\newdirector\newfile\test.txt\'
^
SyntaxError: EOL while scanning string literal
>>> path = r'D:\newdirector\newfile\test.txt' + '\\'
>>> print(path)
D:\newdirector\newfile\test.txt\
长字符串是用一对三引号("""…""")扩起来的字符串,用来编写多行文本。
如下例4-1:
>>> Sentence = """I
... Love
... China"""
>>> Sentence
'I\nLove\nChina'
>>> print(Sentence)
I
Love
China
可以看到,Python在读取长字符串时,会在每一行换行处添加一个换行转义字符(\n),用print解释长字符可以分行打印。