老宋的地盘

 找回密码
 我要加入
搜索
老宋 首页 文章 技术 查看内容

python3 与 python2 的区别

2023-4-16 18:07| 发布者: herosrx| 查看: 153| 评论: 0

摘要: 大家好!最近有读者在python项目中拿到的项目代码是python2的代码,但是当前做项目基本上都是基于python3做的,所以在给python2的代码增加一些新功能或者做代码功能迭代的时候会经常出现报错。今天我们就来对比说一 ...

大家好!最近有读者在python项目中拿到的项目代码是python2的代码,但是当前做项目基本上都是基于python3做的,所以在给python2的代码增加一些新功能或者做代码功能迭代的时候会经常出现报错。今天我们就来对比说一下,python2与python3两个大版本之间有哪些常见的不同?

第一:维护及版本更新不同

官方通知python2 2020开始已不再维护,python3的版本还在不断迭代更新,目前已经更新到了python3.11版本。

第二:两个版本所使用的编码不同

python2使用的是ASCII编码,如果想要支持中文的话,需要更改一下字符集,添加coding:utf-8 ;

python3使用的是utf-8编码,是支持中文的。

第三: 语法上发生变化
1
)python3在不等于的写法上去除了<>,全部改用!= ;
2)整型除法运算‘/’python2返回的是整数,python3整型除法返回的是浮点数,python3中除法返回整数使用//(整除);
3)python3中加入了nonlocal声明。使用noclocal x可以声明该函数上部层级中的变量;
4)python3中去除了print语句,使用print()函数替代使用。还有 exec语句也被exec()函数替代;
5)python3中输入函数改变了(读取键盘输入的方法),其实Python2raw_input()input( ),两个函数都存在,只不过input()函数只对数字有用;

Python3中对两个函数进行了整合,把raw_input()去掉了,增强input()函数的功能,使其将所有输入当作字符串来处理,并返回字符串类型;

6)python3中加入了关键词as with ;

7)python3中增加了f' {} ',格式化,在python2中是没有这个功能的;

第四:数据类型的使用上发生变化

1)python3去除了长整型long类型,只保留整型int

2python3str表示字符串序列,byte表示字节序列;python2Unicode表示字符串序列,str表示字节序列;

3)字典类型下的方法.keys().items .values()方法返回迭代器,而之前的iterkeys()等函数都被废弃了has_key() in替代了它的使用;

第五:异常的捕捉发生变化

1Python3中,只有继承自BaseException的对象才可以被抛出,换句话说异常类全部继承自BaseException,python2中各类型对象均可以抛出, 并且异常StandardError 也Python3废弃,统一使用Exception;

2)捕获异常的语法改变, raise Exception(args)代替 raise Exception, args语法,并且引入了as关键字来标识异常实例;

第六:python3引入了抽象基类

python3中引入了Abstraact Base ClassesABCs抽象基类,并且也因此增加了@abstractmethod @abstractproperty两个装饰器,对于编写抽象方法更加方便。

第七:其它变化

1xrange() 改为range(),如果想用range()创建一个list,需要进行强类型转换。比如:list(range(10));

2) 序列化模块python3中把python2中的cpickle移除,换成pickle模块使用;

3zip()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版本是返回伪随机布尔值的;

5file类在pytho3中被废弃,并且python3中只能使用open(....)去打开文件;

第八:市场价值

当前因为python2官方不再维护且python3的广泛使用,很多新的算法包、AI包等其他功能模块包都是基于python3开发的,python2基本不兼容。

另一方面,现在很多企业仍保留python2的代码没有进行迭代更新,并且当前很多云服务器上自带安装的是python2(比如阿里云服务器),很多企业为图方便不再安装python3直接使用服务器上的python2进行开发脚本程序。

结语:python2到python3的完全过度还需要一个过程,掌握了解他们才是我们应该做的。(当前python也提供了2to3的脚本可供版本代码转换)


路过

雷人

握手

鲜花

鸡蛋

相关阅读

最新评论

歌名 - 歌手
0:00

    QQ|手机版|小黑屋|老宋 ( 备案中... )

    GMT+8, 2024-4-28 13:01 , Processed in 0.053680 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    返回顶部