大家好!最近有读者在python项目中拿到的项目代码是python2的代码,但是当前做项目基本上都是基于python3做的,所以在给python2的代码增加一些新功能或者做代码功能迭代的时候会经常出现报错。今天我们就来对比说一下,python2与python3两个大版本之间有哪些常见的不同? 第一:维护及版本更新不同 官方通知python2 2020开始已不再维护,python3的版本还在不断迭代更新,目前已经更新到了python3.11版本。 第二:两个版本所使用的编码不同 python2使用的是ASCII编码,如果想要支持中文的话,需要更改一下字符集,添加coding:utf-8 ; python3使用的是utf-8编码,是支持中文的。 第三: 语法上发生变化 Python3中对两个函数进行了整合,把raw_input()去掉了,增强input()函数的功能,使其将所有输入当作字符串来处理,并返回字符串类型; 6)python3中加入了关键词as 和with ; 7)python3中增加了f' {} ',格式化,在python2中是没有这个功能的; 第四:数据类型的使用上发生变化 1)python3去除了长整型long类型,只保留整型int 2)python3中str表示字符串序列,byte表示字节序列;python2中Unicode表示字符串序列,str表示字节序列; 3)字典类型下的方法.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃了has_key()用 in替代了它的使用; 第五:异常的捕捉发生变化 1)在Python3中,只有继承自BaseException的对象才可以被抛出,换句话说异常类全部继承自BaseException,python2中各类型对象均可以抛出, 并且异常StandardError 也被Python3废弃,统一使用Exception; 2)捕获异常的语法改变,用 raise Exception(args)代替 raise Exception, args语法,并且引入了as关键字来标识异常实例; 第六:python3引入了抽象基类 python3中引入了Abstraact Base Classes,ABCs抽象基类,并且也因此增加了@abstractmethod和 @abstractproperty两个装饰器,对于编写抽象方法更加方便。 第七:其它变化 1)xrange() 改为range(),如果想用range()创建一个list,需要进行强类型转换。比如:list(range(10)); 2) 序列化模块python3中把python2中的cpickle移除,换成pickle模块使用; 3)zip()、map()和filter()都返回迭代器。而apply()、 callable()、coerce()、 execfile()、reduce()和reload()函数都被去除了。python2中的callable(func)函数在python3中可以使用hasattr(func, '__call__');python2中reduce() 在python3中使用functools模块包中的reduce(); 4)比较的返回不同,如果x < y的不能比较,抛出TypeError异常。python2版本是返回伪随机布尔值的; 5)file类在pytho3中被废弃,并且python3中只能使用open(....)去打开文件; 第八:市场价值 当前因为python2官方不再维护且python3的广泛使用,很多新的算法包、AI包等其他功能模块包都是基于python3开发的,python2基本不兼容。 另一方面,现在很多企业仍保留python2的代码没有进行迭代更新,并且当前很多云服务器上自带安装的是python2(比如阿里云服务器),很多企业为图方便不再安装python3直接使用服务器上的python2进行开发脚本程序。 结语:python2到python3的完全过度还需要一个过程,掌握了解他们才是我们应该做的。(当前python也提供了2to3的脚本可供版本代码转换) |
GMT+8, 2025-1-18 11:43 , Processed in 0.064302 second(s), 19 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2024 Discuz! Team.