python3之编码详解
一,python2与python3的区别
1)python2可以不用括号()
python3必须加括号
2)python2中有range()有序列表,xrange()生成器
python3中只有range()
3)python2中输入是raw_input()
python3中输入是input()
二, = == is 三者的区别
1) = 是赋值
== 是比较,值是否相等
is 比较的是内存地址
id(内容) 打印的是内容的id print(id1(内容),id2(内容))
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
三,小数据池
小数据池是int和str在一定范围内共用一个数据池,范围-1— -256。小数据池是为了节省内存。
1)str:不含有特殊字符的共用
ps: s1 = ‘xiaoming’
s2 = 'xiaoming'
print(s1 is s2)
结果是True
2)str: ‘一个字符’*小于等于20的数字,还是共用,如果是大于20的就不共用了。
多个字符不论乘什么数字,都不共用
3)剩下的list dict taple set等都没有小数据池概念
四,编码
ascii码: 只有英文字母和特殊字符,一个字节是8位
unicode码: 一个字符是32位,一个字母4个字节
一个汉字是32位,一个汉字4个字节
utf-8: 一个字母是8位,一个字母1个字节
一个汉字是24位,一个汉字3个字节
gbk; 一个字母是8位,一个字母1个字节
一个汉字是16位,一个汉字2个字节
1)各个编码之间的二进制不能互相识别,会乱码。
uncode占得内存太多,所以不能传输和储存。
utf-8,gbk,utf-16,utf-32,gb2312,ascii等都可以储存和传输。
2)python3在内存中是用unicode编码方式存储的,所以不能直接储存和传输,要转化为其他编码进行储存和传输。
五,bytes类型
bytes类型也是一种数据类型。
bytes不是用unicode方式编码的,所以可以储存和传输。
bytes的编码方式是utf-8,gbk,ascii,gb2312等。
1)英文
在python3中:str表现形式; s = ''xiaoming'' str编码形式:unicode
在bytes中: str表现形式: s = b''xiaoming'' str编码形式:utf-8,gbk,ascii,gb2312等
中文
在python3中:str表现形式; s = ''中国'' str编码形式:unicode
在bytes中: str表现形式: s = b''x\e91\e91e91\e91e91\e91 str编码形式:utf-8,gbk,ascii,gb2312等
六,编码 encode
1)将str>>>bytes 可以指定编码方式
s1 = ‘xiaoming’
s11 = s1.encode('utf-8')
print(s11)
表面是将str转化为bytes,实际内部是将unicode转化为utf-8,gbk,ascii,gb2312等