python3与python2

参考:https://www.cnblogs.com/aaronthon/p/8073727.html

一,python2与python3的区别

1)python2可以不用括号()

     python3必须加括号

2)python2中有range()有序列表,xrange()生成器

     python3中只有range(),当数据量特别大时候还是xrange()生成器效率高些。

3)python2中输入是raw_input()

     python3中输入是input()

二,  =    ==    is  三者的区别

1)  =           是赋值

    ==          是比较,值是否相等

        is          比较的是内存地址

    id(内容)   打印的是内容的id       print(id1(内容),id2(内容))

  is 与 == 区别:

  is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等

三,小数据池

        小数据池是int和str在一定范围内共用一个数据池,范围-1— -256。小数据池是为了节省内存。

1)str:不含有特殊字符的共用

             ps:  s1 = ‘alex’     

                      s2 = 'alex'

                      print(s1 is s2)

                     结果是True

2)str: ‘一个字符’*小于等于20的数字,还是共用,如果是大于20的就不共用了。

              多个字符不论乘什么数字,都不共用

3)剩下的list  dict  taple  set等都没有小数据池概念

四,编码

 ascii码:         只有英文字母和特殊字符,一个字节是8位,就是无法解析中文,所以才有了下面Unicode嘛

unicode码:  一个字符是32位,一个字母4个字节,一个字节8比特位

                      一个汉字是32位,一个汉字4个字节,Unicode有点奢侈啊,都固定4个字节存一个字符。所以有了下面的细分码

utf-8:           一个字母是8位,一个字母1个字节

                      一个汉字是24位,一个汉字3个字节

gbk;             一个字母是8位,一个字母1个字节

                      一个汉字是16位,一个汉字2个字节,但是咱中文广博,有时候2个字节存不下啊,所以now一般都用utf-8.啥字符都能包括进来了。win系统默认是gbk编码表,因为95年就定了gbk,但是Linux上python2用的古老的ASCII码表,碰到中文

根本就无法解析,你还不别提乱不乱码的事,解析都玩不了。好在python3彻底解决了中文乱码问题,因为系统默认用Unicode码表了。

1)任何的各个编码之间的二进制不能互相识别,会乱码,本质因为不同的编码表不同,即使一样的编码号,你解码表不一样所以还是得到不一样的结果,这就是所谓的乱码了

     unicode占得内存太多,所以不能传输和储存。

     utf-8,gbk,utf-16,utf-32,gb2312,ascii等都可以储存和传输。

2)python3在内存中是用unicode编码方式存储的,所以不能直接储存和传输,要转化为其他编码进行储存和传输

五,bytes类型(其实就是0/1比特),机器是看不懂我们这些c,c++,java等高级语言的,这些语言是给人类看的,机器要看懂

我们的命令就得,把我们的语言(c等)编译为机器它看得懂的语言(如汇编),然后机器看着汇编语言才能执行人类的命令。

那么机器执行完了,我们咋看机器的返回结果呢?因为我们大部分人不用汇编语言,就得把汇编语言解码为我们人类自己看的

懂的语言(c等)。所以在机器和人类之间,c,c++,java等这些语言就相当一个桥梁打通了二者之间的联系。

然而,语言只是表象,因为其实各种语言(c,java,python 等)都可以和机器交互。本质是因为他们都用了同一套的字符编码表。编码表才是关键。不同的C,Java等语言只是一种各自的表达规则而已。c ,java 尽管写法不同,但是本质都遵循同一套字符编码表,比如c用的utf-8和Java的utf-8是一样的表。c和Java落实到具体时候只是不同的code写法形式而已。

我们在编辑器里面写代码,看代码,比如用了python语言,要让机器按我们的命令执行,就得先编译成机器看得懂的汇编语言,机器执行完了,我们要想看到结果,就得再把汇编解码为对应的python语言。这里关键是要保持编码、解码的一致性,一旦不统一就会乱码。python语言通过utf8形式编码让机器去识别(这里Java,c等语言不同,但如果也用utf8,utf8一一映射规则是统一的,不管你是什么语言(Java,python等)都一样的),机器识别后再执行,返回结果给我们看,这时候就是解码过程。

当机器写入文件/执行代码就是编码过程,凡是机器显示出来的人类肉眼看到的结果,就是经过机器解码出来的,因为机器只认0/1二进制比特流,但是人类看不懂啊。

总结:编解码出问题,要么是本身ASCII码本身无法解析中文,那你得指定它用utf-8编解码。

         还一个,就是机器在执行代码、文件编码的时候,保存进了文件里面,你不打开看。和你点击打开那个文件看一眼,即解码。2者不一样,不一样那他们的码表肯定不一样啊,自然就出现乱码了。

     bytes类型也是一种数据类型。

     bytes不是用unicode方式编码的,所以可以储存和传输。

     bytes的编码方式是utf-8,gbk,ascii,gb2312等。

1)英文

      在python3中:str表现形式; s = ''alex''           str编码形式:unicode

      在bytes中:    str表现形式: s = b''alex''          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 = ‘alex’

     s11 = s1.encode('utf-8')

     print(s11)

     表面是将str转化为bytes,实际内部是将unicode转化为utf-8,gbk,ascii,gb2312等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值