Python入门:Python 2与Python3有什么区别?

今天来说说Python版本上的差异。目前,Python的版本主要包括两种,Python 2与Python 3系列。先介绍一下它们的背景,帮助大家更好的理解。Python 是一种极具可读性和通用性的编程语言。它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣。Python 易于设置,并且是用相对直接的风格来编写,对错误会提供即时反馈。

Python入门:Python 2与Python3有什么区别?

Python 2

Python 2 发布于 2000 年年底,意味着较之先前版本,这是一种更加清晰和更具包容性的语言开发过程。而先前版本的 Python 应用的是 PEP (Python 增强协议),这种技术规范能向 Python 社区成员提供信息或描述这种语言的新特性。此外,Python 2 还包括了更多的程序性功能,包括能自动化地管理内存的循环检测垃圾收集器,增加了对 Unicode 的支持以实现字符的标准化,并采用列表综合的方式以在现有列表基础上创建列表。 随着 Python 2 的不断发展,更多的功能被添加进来,包括将 Python 的类型和类在 Python 2.2 版本中统一为一层。

Python 3

Python 3 被视为 Python 的未来,是目前正在开发中的语言版本。作为一项重大改革,Python 3 于 2008 年年末发布,以解决和修正以前语言版本的内在设计缺陷。Python 3 开发的重点是清理代码库并删除冗余,清晰地表明只能用一种方式来执行给定的任务。对 Python 3.0 的主要修改包括将 print 语句更改为内置函数,改进整数分割的方式,并对 Unicode 提供更多的支持。起初,Python 3的采用很缓慢,因为该语言不能向后兼容 Python 2,这就需要人们决定该使用哪个版本的语言。此外,许多封装库库只适用于 Python 2,但是由于 Python 3 背后的开发团队重申了终止对 Python 2 的支持,促使更多的库被移植到 Python 3 上来。从对 Python 3 提供支持的 Python 包的数量可以看出,Python 3 已得到越来越多的采用,在撰写本文时,支持它的包就已包括了 339 个最受欢迎的 Python 包。

目前,Python 3系列最常使用的就是3.6版本了,但是官网已经更新至3.7,但是这些已经不重要了,同一系列之间的差异不会太大。

Python入门:Python 2与Python3有什么区别?

Python 2.7

在 2008 年 Python 3.0 的发布之后,Python 2.7 于 2010 年 7 月 3 日发布,并计划作为 2.x 版本的最后一版。发布 Python 2.7 的目的在于,通过提供一些测量两者之间兼容性的措施,使 Python 2.x 的用户更容易将功能移植到 Python 3 上。这种兼容性支持包括了 2.7 版本的增强模块,如支持测试自动化的 unittest,用于解析命令行选项的 argparse,以及更方便的集合类。

Python 2.7 具有 Python 2 和 Python 3.0 之间的早期迭代版本的独特位置,它因为对许多具有鲁棒性的库具有兼容性,对于程序员而言一直是非常流行的选择。当我们今天讨论 Python 2 时,我们通常指的是 Python 2.7 版本,因为它是最常用的版本。

然而,Python 2.7 被认为是一种遗留语言,且它的后续开发,包括现在最主要的 bug 修复,将在 2020 年完全停止。但是目前官网关于它的版本更新还在持续进行。

Python入门:Python 2与Python3有什么区别?

以上说了这么多,就是想告诉大家,能用Python 3,就尽量用。虽然一些老的教科书是以Python 2为基础来讲的,但是不影响你使用Python3。下面我就来列一下二者在使用上的差异,这是别人总结的,我修改了一下其中的错误。

1.字符串类型

python中有两种字符类型:字节字符串和文本字符串。

Python入门:Python 2与Python3有什么区别?

2.默认字符

python2中默认的字符串类型默认是ASCII,python3中默认的字符串类型是Unicode。

3.print

python2中,print是个特殊语句,python3中print是函数。

python2:print 'hello word!'

python3:print('hello word!')

4.除法 /

python2中/的结果是整型,python3中是浮点类型。

5.导入

python2中的包导入顺序:标准库—相对倒入(即当前目录)—绝对导入(sys.path)

python3中的包导入顺序:标准库—绝对导入(如果想要相对导入,使用from .moudel)

6.类

python2中默认类是旧式类,需要显式继承新式类(object)来创建新式类。

python3中完全移除旧式类,所有类都是新式类,但仍可显式继承object类。

7.元类声明

python2中声明元类:__metaclass__ = MetaClass

python3中声明元类:class newclass(metaclass=MetaClass):pass

8.异常

python2中引发异常:raise ValueError,'Invalid value'

python3中引发异常:raise ValueError('Invalid value')——在python2中也生效

9.处理异常

python2中处理异常:

try:
 raise ValueError,'Invalid value'
except ValueError,e:
 pass

python3中处理异常:

try:
 raise ValueError,'Invalid value'
except ValueError as e:#在python2中也生效
 pass

python2中异常链会丢失原始异常信息,即:处理B异常时引发了A异常,B异常信息会丢失。

python3中将原始异常信息赋值给__context__属性。并且可以显式指定一个异常作为另一个异常的子句:raise DatabaseError() from IOError()

10.字典

python2中的dict类中的keys、values和items均返回list对象,iterkeys、itervalues和iteritems返回生成器对象。

python3中移除了list、只返回一个生成器的对象,只保留视图(生成器),但方法名为:keys、values和items。

11.模块合并

python2中的StringIO和cStringIO合并为python3中的io。

python2中的pickle和cPickle合并为python3中的pickle。

python2中的urllib、urllib2和urlparse合并为python3中的urllib。

12.重命名模块

Python入门:Python 2与Python3有什么区别?

Python入门:Python 2与Python3有什么区别?

后续发展

Python 3 和 Python 2 之间的最大区别不是语法上的,而是事实上 Python 2.7 将在 2020 年失去后续的支持,Python 3 将继续开发更多的功能和修复更多的错误。最近的发展包括格式化的字符串,类创建的简单定制,和用一种更干净的句法方式来处理矩阵乘法。Python 3 的后续开发意味着,开发人员可以对问题被及时解决抱有信心,并且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。

写在最后

前几天有私信我要Python的学习资料,我连夜整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Python的同学可以免费下载学习学习。文件下载方式:点击我的头像,关注后私信回复“资料”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。“编程是门手艺活”。什么意思?得练啊。

Python入门:Python 2与Python3有什么区别?

相关推荐