思维导图
字符串的意思是“一串字符”,比如"Hello, Python"是一个字符串,"How do you do?"也是一个字符串。Python要求字符串必须使用引号括起来,可使用单引号或双引号,只要两边的引号能配对即可。
4.1 字符串和转义字符
字符串的内容几乎可以包含任何字符,英文字符也行,中文字符也行。
字符串既可以用单引号括起来,也可以用双引号括起来,这没有任何区别。例如如下代码。
str1 = 'JJ Lin'
str2 = "民哥聊编程"
print(str1)
print(str2)
运行上面的代码,输出如下。
如果字符串内容本身包含了单引号或双引号,可以用以下两种方式进行特殊处理。
- 使用不同的引号将字符串括起来。
- 对引号进行转义。
对于第一种处理方式,如果字符串内容中包含了单引号,则可以用双引号将字符串括起来。例如:
str3 = 'I'm a student'
在Python交互式解释器运行上面的代码,可以看到如下,输出语法错误。
由于上面的字符串包含了单引号,此时Python会将字符串中的单引号与第一个单引号配对,这样就会把'I'当成字符串,而后面的m a student'就变成了多余的内容,从而导致语法错误。
为了避免这种问题,可以将上面的代码改为如下形式。
str3 = "I'm a student"
在Python交互式解释器运行上面的代码,可以看到如下,解释器编译通过。
上面代码使用双引号将字符串括起来,此时Python就会把字符串中的单引号当成字符串内容,而不是和字符串开始的引号配对。
如果字符串内容本身包含双引号,则可以使用单引号将字符串括起来,例如如下代码。
str4 = 'The priest said, "God bless you."'
在Python交互式解释器运行上面的代码,可以看到如下输出。
第二种处理方式:使用转义字符。Python允许使用反斜线(\)将字符串中的特殊字符进行转义。如果字符串既包含单引号,又包含双引号,就必须使用转义字符,例如如下代码。
str5 = '"Well, let\'s begin our class.", says the teacher'
在Python交互式解释器运行上面的代码,可以看到如下输出。
4.2 拼接字符串
Python使用加号(+)作为字符串的拼接运算符,例如如下代码。
s1 = "Python "
s2 = "is Funny"
# 使用+拼接字符串
s3 = s1 + s2
print(s3)
在Python交互式解释器运行上面的代码,可以看到如下输出。
4.3 repr和字符串
Python不允许直接拼接数值和字符串,需将数值转换成字符串后才能进行拼接。可以使用str()或repr()函数,将数值转换成字符串。例如如下代码。
s1 = "这本书的价格是:"
p = 68.9
# 字符串直接拼接数值,程序报错
print(s1 + p)
# 使用str()将数值转换成字符串
print(s1 + str(p))
# 使用repr()将数值转换成字符串
print(s1 + repr(p))
在Python交互式解释器运行上面的代码,可以看到如下输出。
str本身是Python的内置类型(和int、float一样),而repr()则只是一个函数。repr()会以Python表达式的形式来表示值,例如如下代码。
st = "I'm a coder"
print(st)
print(repr(st))
在Python交互式解释器运行上面的代码,可以看到如下输出。
上面的输出结果可以看出,直接使用print()函数输出字符串时,只能看到字符串的内容,没有引号;但先使用repr()函数对字符串进行处理,再使用print()执行输出,可以看到带引号的字符串——这就是字符串的Python表达式形式。
4.4 使用input获取用户输入
input()函数用于向用户生成一条提示,然后获取用户输入的内容。用户可以输入任何内容,input()函数总是返回一个字符串。例如如下代码。
msg = input("请输入你的值:")
print(type(msg))
print(msg)
第一次运行该程序,输入一个整数,运行过程如下:
PS:Sublime text如何调试input函数,可点击此链接学习。
第二次运行该程序,输入一个浮点数,运行过程如下:
第三次运行该程序,输入一个字符串,运行过程如下:
从上面的运行过程可以看出,无论输入哪种内容,始终可以看到input()函数返回字符串,程序总会将用户输入的内容转换成字符串。
4.5 长字符串
Python多行注释提到的使用三个引号(单引号或双引号)来包含多行注释内容,这是长字符串的写法。当定义的长字符串没有赋值给任何变量,那么这个字符串相当于被解释器忽略了,也就相当于注释掉了。长字符串也可以赋值给变量,例如如下代码。
s = '''"Let's go fishing", said Ben.
"OK, Let's go", said her borther.
They walked to a lake'''
print(s)
运行上面的代码,输出如下。
当程序中有大段文本内容要定义成字符串时,优先推荐使用长字符串形式。这种形式可以让字符串包含任何内容,既可包含单引号,也可以包含双引号。
4.6 原始字符串
由于字符串中的反斜线都有特殊的作用,因此当字符串中包含反斜线时,就需要对其进行转义。
比如写一条Windows的路径:D:\python\codes\02\2.4,如果在Python程序中直接这样写肯定是不行的,需要写成:D:\\python\\codes\\02\\2.4,这样会让人觉得很麻烦,这时可借助原始字符串来解决这个问题。
原始字符串以”r“开头,原始字符串不会把反斜线当成特殊字符。因此,上面的Windows路径可直接写成r'D:\python\codes\02\2.4'。例如如下代码。
s1 = r'D:\python\codes\02\2.4'
print(s1)
在Python交互式解释器运行上面的代码,可以看到如下输出。
如果原始字符串中包含引号,程序同样需要对引号进行转义(否则Python同样无法对字符串的引号精确配对),但此时用于转义的反斜线会变成字符串的一部分。例如如下代码。
# 原始字符串包含的引号,同样需要转义
s2 = r'"Let\'s go", said JJ Lin'
print(s2)
在Python交互式解释器运行上面的代码,可以看到如下输出。
4.7 字节串(bytes)
字符串(str)由多个字符组成,字符为单位进行操作;字节串(bytes)由多个字节组成,以字节为单位进行操作。
bytes和str除操作的数据单元不同之外,它们支持的所有方法都基本相同,bytes也是不可变序列。
bytes对象只负责以字节(二进制格式)序列来记录数据,至于这些数据到底表示什么内容,完全由程序决定。如果采用合适的字符集,字符串可以转换成字节串;反过来,字节串也可以恢复成对应的字符串。
bytes保存的就是原始的字节(二进制格式)数据,因此bytes对象可用于在网络上传输数据 ,也可用于存储各种二进制格式的文件,比如图片、音乐等文件。
将一个字符串转换成bytes对象有如下三种方式。
- 如果字符串内容都是 ASCII 字符,则可以通过直接在字符串之前添加b来构建字节串值
- 调用 bytes()函数(其实是 bytes 构造方法)将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用UTF-8字符集。
- 调用字符串本身的encode()方法将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用UTF-8字符集。
例如,如下代码示范了如何创建字节串。
# 创建一个空的bytes对象
b1 = bytes()
# 创建一个空的bytes值
b2 = b''
# 通过b前缀指定python是bytes类型的值
b3 = b'python'
print(b3)
print(b3[0])
print(b3[2:4])
# 调用bytes方法将字符串转换成bytes对象
b4 = bytes('我爱Python编程', encoding='utf-8')
print(b4)
# 利用字符串的encode()方法编码成bytes,默认使用UTF-8字符集
b5 = "学习Python使工作变得高效".encode('utf-8')
print(b5)
上面代码中b1~b5都是字节串对象,该代码示范了以不同方式来构建字节串对象。其中b2、b3是直接在ASCII字符串前添加b前缀来得到字节串的;b4调用 bytes()函数来构建字节串;而b5则调用字符串的encode()方法来构建字节串。
运行上面的代码,输出如下。
作者Info
【微信号】:luckweimin
【微信公众号】:民哥聊编程。欢迎大家关注~
【B站】:民哥聊编程(https://space.bilibili.com/620580007)
【CSDN】:https://blog.csdn.net/u013092707?type=blog
标签:Python,代码,bytes,如下,print,字符串,讲义,2.4 From: https://blog.csdn.net/u013092707/article/details/137407468