python2与python3的区别

本文概述了从Python2升级到Python3过程中的一些关键差异,包括print语法、input函数行为的变化、dict字典操作更新、range()函数的迭代器特性、内置函数map和filter返回类型的变化、编码方式的转变、除法运算符的行为调整、容器数据类型的属性更新、super()函数的简化调用方式、第三方包兼容性的变化以及数据类型方面的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前记:python3对python2一些改变是:将一些内置函数由python2时返回列表变为python3返回迭代器(生成器)对象。python3对其改进的原因是迭代器的惰性求值特性(迭代器不会在它被绑定到变量之后就立即求值,而是等用到时再求值),这个特性可以解决一些巨大甚至无限的集合列表,如菲波那切数列、几十G的文件等等(内存开销太大,非常容易爆),惰性求值可以解决这个问题。

1.print:

python2 print可以不加括号(为print语句);python3必须加括号(print为函数)。要在python2中以函数形式使用print,则应:from __future__ import print_function

2、input:

python2 分raw_input() 和input两个函数,raw_input()使键盘输入转化为字符串,而input()函数则不进行字符串转化;python3只有input()函数,作用是直接将键盘输入转化为字符串。

3、dict字典操作:

python2中有has_key(key)来判断字典中是否存在指定键,而python3中被__contains__(key)函数取代(用key in dict 更pythonic)

4、range():

python2 中range()返回一个整数列表,xrange()返回的是迭代器对象。而python3中range()返回一个整数序列对象(返回迭代器对象),可以使用list()函数转换成列表类型

5、一些内置函数(map,filter等):

如map,filter等内置函数在python2中返回类型为列表,python3返回的是迭代器对象。

6、编码:

python2使用asscii进行编码(python诞生时还没有utf-8),python3使用utf-8编码。(具体编解码我也很混乱,先放放)

7、/除法:

python2除号“/”直接截断除,如5/2=2,  若不想截断除则应声明from __future__ import division,这样5/2=2.5;而python3 中除号“/”不发生截断,如5/2=2.5,若想截断除则应使用“//”,如5//2=2

8、容器数据类型属性变化:

字典类型dict,在python2中的实现是基于hash表,所以是无序的,若要有序需要使用collections.OrderedDict;而python3.6后改写了字典的内部算法,所以python3.6后是有序的(遵循的顺序是Key的插入顺序。也就是说需要用一定顺序插入才能获得排好的结果,否则依然需要sort)。

9、(新式类继承)子类继承父类方法的super():

python2.* 的调用方式为 super(Class[, object or type]).method()例如 B类继承A类 在B类中继承方式为 super(B, self).a_method();而python3.*的调用方式可以直接写为 super().method()   

10、一些第三方包的差异(如PIL与pillow;pickle序列化的不兼容)

在第三方包的差异上,以PIL和pillow为例,PIL为python2.x的图像包,该包日久失修,在python3.x中便不再支持,大家开发了可兼容python2PIL的pillow。(不过无论是PIL还是pillow在程序import时都是import PIL);python2使用cpickle,而python3使用pickle,且将pickle集成到了python3 的标准库中(互相 直接 读取生成的序列化文件不兼容,需要处理,如python3 load python2 序列化出的数据时,在load时指定latin1编码:pickle.load(file_handle,encoding='latin1'),其中file_handle是通过二进制读的方式读取的)。

11、数据类型的差异(长整型)

在python2中如果数字很大会自动由int类型转为long类型,或者在数字后加L(如199L)定义long整型,而python3中Python 3里,只有一种整数类型 int,它本身表示为长整型。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值