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'

 

posted @ 2018-07-21 18:47  欧-阳  阅读(149)  评论(0)    收藏  举报