字符串的切片操作
字符串是不可变类型
不具备增、删、改等操作
切片操作将产生新的对象
s = 'hello,Python'
s1 = s[:5] #由于没有指定起始位置,所以从0开始切
s2 = s[6:] #由于没有指定结束位置,所以切到字符串的最后一个元素
s3 = '!'
newstr = s1 + s3 + s2
print(s1)
print(s2)
print(newstr)
print('-------------------')
print(id(s1))
print(id(s2))
print(id(s3))
print(id(newstr))
print('----------切片[start:end:step]-------------')
print(s[1:5:1]) #从1开始截到5(不包含5),步长为1
print(s[::2]) #默认从0 开始,没有写结束,默认到字符串的最后一个元素,步长为2,两个元素之间的索引间隔为2
print(s[::-1]) #默认从字符串的最后一个元素开始,到字符串的第一个元素结束,因为步长为负数
print(s[-6::1]) #从索引为-6开始,到字符串最后一个元素结束,步长为1
格式化字符串
%作占位符
'我的名字叫:%s, 今年 %d岁了' % (name, age)
定义的格式化字符串 固定符号 实际值 实际值
{}作占位符
‘我的名字叫:{0}, 今年{1}岁了,我真的叫:{0}’.format(name, age)
name = '张三'
age = 20
print('我叫%s, 今年%d岁' % (name,age))
#(2) {}
print('我叫{0},今年{1}岁'.format(name,age))
#(3) f-string
print(f'我叫{name}, 今年{age}岁')
print('%10d' % 99) #10表示的是宽度
print('%f' % 3.1415926) #.3表示是小数点后三位
#同时表示宽度和精度
print('%10.3f' % 3.1415926) # 一共总宽度为10,小数点后3位
print('hellohello')
print('{0:.3}'.format(3.1415926)) #.3表示的是一共是3位数
print('{:.3f}'.format(3.1415926)) #.3f表示是3位小数
print('{:10.3f}'.format(3.1415926)) #同时设置宽度和精度,一共10位,3位是小数
字符串的编码转换
为什么需要字符串的编码转换
A计算机 B计算机
str在内存中以Unicode表示 —>编码->byte字节传输->解码-> 显示
编码与解码的方式
编码:将字符串转换为二进制数据(bytes)
解码:将bytes类型的数据转换成字符串类型
s = '天涯共此时'
# 编码
print(s.encode(encoding = 'GBK')) #在GBK这种编码格中,一个中文占两个字节
print(s.encode(encoding = 'UTF-8')) #在UTF-8这种编辑格式中,一个中文占3个字节
#解码
#byte代表就是一个二进制数据(字节类型的数据)
byte = s.encode(encoding = 'GBK') #编码
print(byte.decode(encoding = 'GBK')) #解码
byte = s.encode(encoding = 'UTF-8')
print(byte.decode(encoding = 'UTF-8'))