一、格式化输出
思考:
1.之前讲了字符串的拼接,其中讲了字符串的格式化,除了%s还有哪些格式化?
2.format还有其他的用法吗?
a.格式化输出的方式
a='小明'
b=20
c='广东人'
print('我叫%s,今年%s,我是%s',%(a,b,c))
b.%f的用法
‘%-6.3f’%10.3 左对齐
‘%+6.3f’%-10.3 显示正负
c.format的用法
'{:.2f}'.format(12.333) 保留小数点后两位
'{a:.2f}'.format(a=12.333)
'{:.2%}'.format(0.333) 百分比格式
'{0:x}'.format(20) 转换成十六进制
'{0:o}'.format(20) 转换成八进制
进制转换的时候用{0:进制}
'{a:<10}'.format(a=12.3,b=13.44) 右对齐,长度为10(大于前面填什么符合就跟着输入什么)
'{a:0<10}'.format(a=12.3,b=13.44) 数字补x (填充右边, 宽度为4)
'{a:0>10}'.format(a=12.3,b=13.44) 左对齐...
'{a:0^10}'.format(a=12.3,b=13.44) 两边对齐...
'{{ hello {0} }}'.format('python’) 转义{和}符号
f = ' hello {0} '.format
f('python’) 这里可以把format当作一个函数来看
格式化和转义应用
格式化得到的结果都是字符串,通过把位置预先留出来,后期再往其中填入内容可以让输出内容更加整洁美观,而又具有良好的可读性,同时让代码更简洁精练
字符串的转义可以方便我们表示我们不太方便表示的字符,同时转义有些情况下又会带来麻烦,特别是在表示路径的时候,这种情况下可以在字符串前面加上 r 来去掉字符串的转义
二、字符串编码
思考
1.刚才我们讲到了我们在python内部要对字符串进行拼接和格式化是为了输出和传输,那python中字符串的可以直接在网络上传输吗?
2.如果不可以的话,python内部是怎么做的呢?
a.编码(encode)
两种编码:国际编码utf-8和国内gbk
'潭州'.encode(encoding='utf8') 国际编码
'潭州'.encode(encoding='gbk') 国内编码
上面的输出结果分别是:
b'\xe6\xbd\xad\xe5\xb7\x9e'
b'\xcc\xb6\xd6\xdd'
b.解码(decode)
用那种编码的就用那种解码
a='潭州'.encode('utf8')
a.decode('utf8')
编码的发展
python对字符集的处理
字符串编码的作用
Python统一了编码,这样Python在内部处理的时候不会因编码不同而出现程序不能正常执行的问题
Python会自动根据系统环境选择编码,但是经常在文件传输的过程中,会遇到各种不同的编码,这个时候就需要我们去处理编码问题
三、深浅复制
思考?
1.列表里面可以放列表吗?
a.浅复制
a=[1,2,3]
b=a.copy()
b=[1,2,3] 复制后内存地址不相同
print(id(a[0]))
print(id(b[0])) 内存地址都相同
b.深复制
#需导入包
import copy
a=[1,2,3]
c=copy.deepcopy(a)
id(a[0])
id(c[0]) 内存地址不相同
***注:深复制全都复制过
***查看关键字 help(‘keywords’)
深浅复制的应用
深浅复制只有在列表嵌套列表的情况下讨论
如果想保留修改之前的数据,就可以使用列表的复制,但要注意列表嵌套情况下的问题
四、bytes和bytearray
思考:
Python中的序列类型还有吗?
a.bytes二进制序列类型
指定长度的零填充字节对象:
bytes(3)
二进制字符串对象:
bytes(b'abc')
b.bytearray二进制数组
指定长度的零填充字节对象:
bytearray(3)
二进制字符串对象:
bytearray(3)
二进制序列类型的应用
二进制序列类型的用法比较少见,是python中少用的一种序列类型
对于二进制序列类型,大家基本了解即可