课程名称:Python3 入门教程(新版)
课程章节: Python变量和数据类型
主讲老师:咚咚呛
课程内容
字符串的format
- 字符串模板
- 模板数据内容
- 单个模板数据内容
- 多个模板数据内容
- 模板数据内容顺序
字符串的编码
- python2 需要显示声明编码
字符串的切片
- 把字符串看作一个列表
- 字符串的一些操作
课程收获
多行字符串
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀r,表示这是一个 raw 字符串,里面的字符就不需要转义了。
print(r'\(~_~)/ \(~_~)/');
但是r’…'表示法不能表示多行字符串,也不能表示包含’和 "的字符串。
如果要表示多行字符串,可以用三重引号’’’…’’’ 或 “”"…"""表示:
'''
a nice day
go to happy
beautiful shoes,want to fly
'''
还可以在多行字符串前面添加r,把这个多行字符串也变成一个raw
字符串。
字符串 format
字符串是Python程序重要的数据类型,到目前为止,我们输出的字符串的内容都是固定的,但有时候通过字符串输出的内容不是固定的,这个时候需要使用format来处理字符串,输出不固定的内容。
字符串format由两个部分组成,字符串模板和模板数据内容组成,通过大括号{}
,就可以把模板数据内容嵌到字符串模板对应的位置。
# 字符串模板
template = 'Hello {}'
# 模板数据内容
world = 'World'
result = template.format(world)
print(result) # ==> Hello World
# 指定顺序
template = 'Hello {0}, Hello {1}, Hello {2}, Hello {3}.'
result = template.format('World', 'China', 'Beijing', 'imooc')
print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc.
# 调整顺序
template = 'Hello {3}, Hello {2}, Hello {1}, Hello {0}.'
result = template.format('World', 'China', 'Beijing', 'imooc')
print(result) # ==> Hello imooc, Hello Beijing, Hello China, Hello World.
# 除了使用顺序,还可以指定对应的名字,使得在format过程更加清晰。
# 指定{}的名字w,c,b,i
template = 'Hello {w}, Hello {c}, Hello {b}, Hello {i}.'
world = 'World'
china = 'China'
beijing = 'Beijing'
imooc = 'imooc'
# 指定名字对应的模板数据内容
result = template.format(w = world, c = china, b = beijing, i = imooc)
print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc.
字符串编码
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这种编码方式被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
在python3中,默认使用UTF-8 Unicode来进行编码,因此我们可以在python中输入任意形式的Unicode字符串,都不会遇到像python2中遇到的问题(在python2中,需要显式指明该字符串是Unicode字符串),如果没有了解过python2,则完全可以忽略这一点,python3提供了更加简单易懂的编码方式.
# coding: utf-8
s1 = '这是中文字符串'
s2 = 'this is an English string'
print(s1)
print(s2)
字符串切片
切片需要在中括号[]中填入两个数字,中间用冒号分开,表示子串的开始位置和结束位置,并且这是半闭半开区间,不包括最后的位置。
不过需要注意的是,在程序的世界中,计数是从0开始的,使用0来表示第一个
字符串可以用 + 进行连接(粘到一起),也可以用 * 进行重复:
3 * 'un' + 'ium' # ===> unununium
相邻的两个或多个 字符串字面值 (引号引起来的字符)将会自动连接到一起,但只能对两个字面值这样操作,变量或表达式不行,如果你想连接变量,或者连接变量和字面值,可以用 +
号
'Py' 'thon' # ===> Python
字符串是可以被 索引 (下标访问)的,第一个字符索引是 0,索引也可以用负数,这种会从右边开始数。
注意 -0 和 0 是一样的,所以负数索引从 -1 开始。
除了索引,字符串还支持 切片。索引可以得到单个字符,而 切片 可以获取子字符串:
word = 'Python';
word[0]
word[5]
word[-1]
word[-6]
word[0:2]
word[:2] + word[2:]
注意切片的开始总是被包括在结果中,而结束不被包括。这使得s[:i] + s[i:]
总是等于 s
Python 中的字符串不能被修改,它们是 immutable
的。因此,向字符串的某个索引位置赋值会产生一个错误