Python字符串

字符串(string)就是若干个字符的集合. Python中的字符串必须由双引号" "或者单引号' '包围, 具体格式为:

"字符串内容"
'字符串内容'
  • 字符串是Python的内置数据类型;
  • Python中没有字符这种类型, 一个字符就是只有一个元素的字符串;
  • Python字符串中的双引号和单引号没有任何区别(通常使用单引号).

注解

有些编程语言中, 双引号字符串可以解析变量, 单引号字符串一律原样输出, 但是Python字符串中的双引号和单引号没有任何区别.

处理字符串中的引号

当字符串内容中出现引号时, 我们需要进行特殊处理, 否则Python会解析出错, 例如:

'I\'m a great coder!'

由于上面的字符串中包含了单引号, 此时Python会将字符串中的单引号与第一个单引号配对, 这样就会把'I'当成字符串, 而后面的m a greater coder!'就变成了多余的内容, 从而导致语法错误.

对于这种情况, 有两种处理方案:

  • 对引号进行转义

在引号前面添加反斜杠\就可以对引号进行转义, 让Python把它作为普通字符对待.

Example:

str = 'I\'m a great coder'

注解

有些字符就是普通的字符,可以正常显示的, 如a, b, c, 1, 2, 3.

有写字符有特殊的含义, 通常是不显示的, 而是有特殊的含义, 比如引号表示字符串的开始和结束标记. 对于有特殊含义的字符, 在其前面加上一个反斜杠, 表示将其作为普通字符来处理(去掉其特殊含义).

\叫做转义字符, 表示将其后的特殊字符作为普通字符处理. \本身就是一个特殊字符, \\表示对反斜杠进行转义, 将反斜杠作为普通字符.

  • 使用不同的引号包围字符串

如果字符串内容中出现了单引号, 那么可以使用双引号包围字符串, 反之亦然.

Example:

str = "I'm a great coder"

字符串的换行

Python不是格式自由的语言, 它对程序的换行, 缩进都有严格的语法要求. 要想在书写字符串时换行, 必须在行尾添加一个反斜杠\.

Example:

str = 'hello\
world'

注解

行末的反斜杠表示换行书写, Python在解析时会将不同行的字符串连接在一起, 中间的空白字符会保留.

另外, Python也支持表达式的换行.

Example:

num = 20 + 3/4 + \
    2*3

print(num)

Python长字符串

所谓长字符串, 就是可以直接换行(不用加反斜杠\)书写的字符串.

Python长字符串由三个双引号"""或者三个单引号'''包围, 语法格式如下:

"""长字符串内容"""
'''长字符串内容'''

在长字符串中放置单引号或者双引号不会导致解析错误.

当程序中有大段文本内容需要定义成字符串时, 优先推荐使用长字符串形式, 因为这种形式非常强大, 可以在字符串中放置任何内容, 包括单引号和双引号.

但是注意, 长字符串中的换行, 空格, 缩进等空白字符都会原样输出.

Python原始字符串

在普通字符串或者长字符串的开头加上r前缀, 就变成了原始字符串, 具体格式为:

str1 = r'原始字符串内容'
str2 = r'''原始字符串内容'''

所谓原始字符串, 就是所见即所得的字符串.

原始字符串中的引号

如果普通格式的原始字符串中出现引号, 程序同样需要对引号进行转义, 否则Python照样无法对字符串的引号精确匹配; 但是和普通字符串不同的是, 此时用于转义的反斜杠会称为字符串内容的一部分.

Example:

str1 = r'I\'m a great coder!'
print(str1)

输出结果为:

I\'m a great coder!

注解

Python的原始字符串仍然是所见即所得的, 但是原始字符串中的的\也仍然有转义的作用.

需要注意的是, Python原始字符串中的反斜杠仍然会对引号进行转义, 因此原始字符串的结尾处不能是反斜杠, 否则字符串结尾处的引号会被转义, 导致字符串不能正确结束. 在Python中有两种方式解决这个问题:

  • 不要使用原始字符串;
  • 单独书写反斜杠.

例如, 想表示D:\Program Files\Python 3.8\, 可以这样写:

# 不使用原始字符串
str1 = 'D:\\Program File\\Python 3.8\\'
print(str1)

# 单独书写反斜杠, 再使用字符串拼接
str2 =  r'D:\Program File\Python 3.8' '\\'
print(str2)

字符串编码

Python 3.x中, 字符串采用的是Unicode字符集, 默认使用的是UTF-8编码.

可以使用如下代码来查看当前环境下的编码格式:

>>> import sys
>>> sys.getdefaultencoding()

同时, 在Python 3.x中也可以使用ord()chr()函数实现字符和编码数字之间的转换, 例如:

>>> ord('Q')
81
>>> char(81)
'Q'

Python默认采用UTF-8编码, 但也提供了encode()方法, 可以将Unicode编码格式的字符串转化为其它编码格式.