Python字符串详解(包含长字符串和原始字符串)
若干个字符的集合就是一个字符串(String)。Python 中的字符串必须由双引号
下面都是合法的字符串:
Python 字符串中的双引号和单引号没有任何区别。而有些编程语言的双引号字符串可以解析变量,单引号字符串一律原样输出,例如 PHP 和 JavaScript。
对于这种情况,我们有两种处理方案:
另外,Python 也支持表达式的换行,例如:
Python 长字符串由三个双引号
如果长字符串没有赋值给任何变量,那么这个长字符串就不会起到任何作用,和一段普通的文本无异,相当于被注释掉了。
【实例】将长字符串赋值给变量:
转义字符有时候会带来一些麻烦,例如我要表示一个包含 Windows 路径
这种写法需要特别谨慎,稍有疏忽就会出错。为了解决转义字符的问题,Python 支持原始字符串。在原始字符串中,
在普通字符串或者长字符串的开头加上
将上面的 Windows 路径改写成原始字符串的形式:
请看下面的代码:
需要注意的是,Python 原始字符串中的反斜杠仍然会对引号进行转义,因此原始字符串的结尾处不能是反斜杠,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。
在 Python 中有两种方式解决这个问题:一种方式是改用长字符串的写法,不要使用原始字符串;另一种方式是单独书写反斜杠,这是接下来要重点说明的。
例如想表示
" "
或者单引号' '
包围,具体格式为:
"字符串内容"
'字符串内容'
下面都是合法的字符串:
- "123789"
- "123abc"
- "https://www.xinbaoku.com/python/"
- "新宝库成立8年了"
Python 字符串中的双引号和单引号没有任何区别。而有些编程语言的双引号字符串可以解析变量,单引号字符串一律原样输出,例如 PHP 和 JavaScript。
处理字符串中的引号的
当字符串内容中出现引号时,我们需要进行特殊处理,否则 Python 会解析出错,例如:'I'm a great coder!'
由于上面字符串中包含了单引号,此时 Python 会将字符串中的单引号与第一个单引号配对,这样就会把'I'
当成字符串,而后面的m a great coder!'
就变成了多余的内容,从而导致语法错误。对于这种情况,我们有两种处理方案:
1) 对引号进行转义
在引号前面添加反斜杠\
就可以对引号进行转义,让 Python 把它作为普通文本对待,例如:
str1 = 'I\'m a great coder!' str2 = "引文双引号是\",中文双引号是“" print(str1) print(str2)运行结果:
I'm a great coder!
引文双引号是",中文双引号是“
2) 使用不同的引号包围字符串
如果字符串内容中出现了单引号,那么我们可以使用双引号包围字符串,反之亦然。例如:str1 = "I'm a great coder!" #使用双引号包围含有单引号的字符串 str2 = '引文双引号是",中文双引号是“' #使用单引号包围含有双引号的字符串 print(str1) print(str2)运行结果和上面相同。
字符串的换行
Python 不是格式自由的语言,它对程序的换行、缩进都有严格的语法要求。要想换行书写一个比较长的字符串,必须在行尾添加反斜杠\
,请看下面的例子:s2 = 'It took me six months to write this Python tutorial. \ Please give me more support. \ I will keep it updated.'上面 s2 字符串的比较长,所以使用了转义字符
\
对字符串内容进行了换行,这样就可以把一个长字符串写成多行。另外,Python 也支持表达式的换行,例如:
num = 20 + 3 / 4 + \ 2 * 3 print(num)
Python长字符串
在《Python注释》一节中我们提到,使用三个单引号或者双引号可以对多行内容进行注释,这其实是 Python 长字符串的写法。所谓长字符串,就是可以直接换行(不用加反斜杠\
)书写的字符串。Python 长字符串由三个双引号
"""
或者三个单引号'''
包围,语法格式如下:
"""长字符串内容"""
'''长字符串内容'''
如果长字符串没有赋值给任何变量,那么这个长字符串就不会起到任何作用,和一段普通的文本无异,相当于被注释掉了。
注意,此时 Python 解释器并不会忽略长字符串,也会按照语法解析,只是长字符串起不到实际作用而已。
当程序中有大段文本内容需要定义成字符串时,优先推荐使用长字符串形式,因为这种形式非常强大,可以在字符串中放置任何内容,包括单引号和双引号。【实例】将长字符串赋值给变量:
longstr = '''It took me 6 months to write this Python tutorial. Please give me a to 'thumb' to keep it updated. The Python tutorial is available at https://www.xinbaoku.com/python/.''' print(longstr)长字符串中的换行、空格、缩进等空白符都会原样输出,所以你不能写成下面的样子:
longstr = ''' It took me 6 months to write this Python tutorial. Please give me a to 'thumb' to keep it updated. The Python tutorial is available at https://www.xinbaoku.com/python/. ''' print(longstr)虽然这样写格式优美,但是输出结果将变成:
It took me 6 months to write this Python tutorial.
Please give me a to 'thumb' to keep it updated.
The Python tutorial is available at https://www.xinbaoku.com/python/.
Python原始字符串
Python 字符串中的反斜杠\
有着特殊的作用,就是转义字符,例如上面提到的\'
和\"
,我们将在《Python转义字符》一节中详细讲解,这里大家先简单了解。转义字符有时候会带来一些麻烦,例如我要表示一个包含 Windows 路径
D:\Program Files\Python 3.8\python.exe
这样的字符串,在 Python 程序中直接这样写肯定是不行的,不管是普通字符串还是长字符串。因为\
的特殊性,我们需要对字符串中的每个\
都进行转义,也就是写成D:\\Program Files\\Python 3.8\\python.exe
这种形式才行。这种写法需要特别谨慎,稍有疏忽就会出错。为了解决转义字符的问题,Python 支持原始字符串。在原始字符串中,
\
不会被当作转义字符,所有的内容都保持“原汁原味”的样子。在普通字符串或者长字符串的开头加上
r
前缀,就变成了原始字符串,具体格式为:
str1 = r'原始字符串内容'
str2 = r"""原始字符串内容"""
将上面的 Windows 路径改写成原始字符串的形式:
rstr = r'D:\Program Files\Python 3.8\python.exe' print(rstr)
原始字符串中的引号
如果普通格式的原始字符串中出现引号,程序同样需要对引号进行转义,否则 Python 照样无法对字符串的引号精确配对;但是和普通字符串不同的是,此时用于转义的反斜杠会变成字符串内容的一部分。请看下面的代码:
str1 = r'I\'m a great coder!' print(str1)输出结果:
I\'m a great coder!
需要注意的是,Python 原始字符串中的反斜杠仍然会对引号进行转义,因此原始字符串的结尾处不能是反斜杠,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。
在 Python 中有两种方式解决这个问题:一种方式是改用长字符串的写法,不要使用原始字符串;另一种方式是单独书写反斜杠,这是接下来要重点说明的。
例如想表示
D:\Program Files\Python 3.8\
,可以这样写:
str1 = r'D:\Program Files\Python 3.8' '\\' print(str1)我们先写了一个原始字符串
r'D:\Program Files\Python 3.8'
,紧接着又使用'\\'
写了一个包含转义字符的普通字符串,Python 会自动将这两个字符串拼接在一起,所以上面代码的输出结果是:
D:\Program Files\Python 3.8\
由于这种写法涉及到了字符串拼接的相关知识,这里读者只需要了解即可,后续会对字符串拼接做详细介绍。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算