python之路11--之python2和python3的区别、bytes类型与python小知识点
一、python2与python3的区别
1、字符编码的区别
python 2默认的字符编码是ascii码,不指定字符集直接显示中文会报语法错误!!
python3默认是字符集是utf-8,可以直接显示中文!!
2、print的区别
python2.7中使用print打印内容时用:print("test")或者print “test”都可以执行
python3中使用print打印内容时必须要使用print("test")
3、range与xrange的区别
python2里面出了有range还有一个xrange,python3里只有range。
range:是一个有序列表
xgrange:是一个生成器,可以转换成grange
4、input的区别
input:用户输入,
python2里的input写法为:raw_input()
python3里的input写法为:input()
说明:python2和python3的区别后续遇到后会持续更新.....
二、小知识点
1、=、==、is、与id
=:变量的赋值操作;
a = 1 #将数字类型1赋值给了变量a
==:比较两个值是否相等;
a = 1 if a == 1: print("a等于1") else: print("a不等于1")
is:比较变量的内存地址
a = "123" a1 = a print(a1 is a)
id:显示内存地址的id号
a = "123" a1 = a print(id(a1),id(a)) 结果为:2698789202720 2698789202720
2、小数据池(为了节省内存空间)
1、数字类型的小数据池范围(-5到256之间)即、-5到256之间的变量值的多个变量都用一个内存地址,超过了这个数则用两个内存地址了
2、字符串的小数据池范围(1、不能有特殊字符;2、一个字符*20还是一个内存地址,一个字符*21则是两个内存地址了),没有找到规律
说明:列表,字典、元组、集合没有小数据池的概念
三、字符编码
ascii:
A : 00000010 8位 一个字节 表示一个字符
unicode:
A:00000000 00000000 00000000 00000100 32位 四个字节 表示一个字符
中:00000000 00000000 00000000 00001010 32位 四个字节 表示一个字符
utf-8:
A:00000110 8位 一个字节 表示一个字符
亚洲:00000000 00000110 24位 三个字节 表示一个字符
欧洲:00000000 00000000 16位 两个字节 表示一个字符
gbk:
A:000000110 8位 一个字节 表示一个字符
中:00000000 00000110 16位 两个字节 表示一个字符
1、各个编码之间的二进制是不能互相识别的,会产生乱码。
2、文件的储存和传输不能是unicode因为unicode占的字节太多了占的存储空间太大了(只能是utf-8或utf-16或gbk或gb2312或ascii等)
python3中的字符串再内存中是用unicode存储的。
unicode是不适用于存储和传输的,所以需要转换为bytes类型
对于英文来说:
str:表现形式:s = 'ouyang'
编码方式:01010101 unicode
bytes:表现形式:s = b'ouyang'
编码方式:01010101 utf-8 gbk ......
对于中文来说:
str:表现形式:s = '欧阳'
编码方式:01010101 unicode
bytes:表现形式:s = b'x\e91\e71\e61\e51\e41\e31'
编码方式:01010101 utf-8 gbk ......
总结:因为bytes类型的中文展现出来需要通过计算才可以得出汉字,所以python3用默认编码用unicode,但是unicode占的字节太多,存储空间太大不适合传输和存储,所以我们需要用encode来将unicode的编码转换成bytes类型,然后用decode来解码;
name = 'ouyang' b = name.encode("utf-8") print(b) #结果为:b'ouyang' name1 = "欧阳" b1 = name1.encode("utf-8") print(b1) #结果为:b'\xe6\xac\xa7\xe9\x98\xb3'

浙公网安备 33010602011771号