鱼C论坛

 找回密码
 立即注册
查看: 2281|回复: 7

[技术交流] 【选择困难症】解释 Python 2 和 Python 3 的版本之间差别

[复制链接]
发表于 2017-2-27 21:57:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
很多新入行的朋友纠结自己到底是该从python2开始还是3开始。

本文从多个角度分析了2与3的主要区别,并在文末作出总结。

让那些有选择困难的童鞋不再纠结。

文末附上小甲鱼教程里面python3.3.2的软件下载地址。

译文:伯乐在线专栏作者 - iScream
英文:Lisa Tagliaferri

引言

Python 是一种极具可读性和通用性的编程语言。Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣。Python 易于设置,并且是用相对直接的风格来编写,对错误会提供即时反馈,对初学者而言是个很好的选择。

Python 是一种多范式语言,也就是说,它支持多种编程风格,包括脚本和面向对象,这使得它适用于通用目的。随着越来越多地在工业中,被诸如联合太空联盟(NASA 的主要飞机支持承包商)和工业光魔(VFX 和卢卡斯影业的动画工作室)等组织使用,Python 为那些寻求额外编程语言的人提供了巨大的潜力 。

开发于 20 世纪 80 年代末并于 1991 年首次被发布,Python 的创始人是 Guido van Rossum ,而他现在仍然活跃在社区中。被认为是 ABC 编程语言的继承者,Python 的第一版就已经包括异常处理,函数和带继承的类。当一个重要的被称为 comp.lang.python 的 Python 新闻组在 1994 年形成时,Python 的用户基础不断增长,这为 Python 成为开源开发中最受欢迎的编程语言之一铺平了道路。

总体概述

在探讨 Python 2 和 Python 3 之间的潜在可能性和关键的程序化差异之前,我们来看看最近的 Python 主要版本的背景。

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 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 2.7 和Python 3 有许多类似的功能,但它们不应该被认为是完全可互换的。虽然你可以在任一版本中编写出优秀的代码和有用的程序,但是值得了解的是,在代码语法和处理方面两者会有一些相当大的差异。

下面是一些例子,而且你应该记住,当你深入学习 Python 时,你可能会遇到更多的语法差异。

Print

在 Python 2 中, print 被视为一个语句而不是一个函数,这是一个典型的容易弄混的地方,因为在 Python 中的许多操作都需要括号内的参数来执行。如果在 Python 2 中你想要你的控制台输出 ”Sammy the Shark is my favorite sea creature”,你应该写下这样的 print 语句:

print "Sammy the Shark is my favorite sea creature"

在使用 Python 3 时,print()会被显式地视为一个函数,因此要输出上面相同的字符串,你可以使用这种非常简单且易于使用的函数语法:

print("Sammy the Shark is my favorite sea creature")

这种改变使得 Python 的语法更加一致,并且在不同的 print 函数之间进行切换更加容易。就方便性而言,print()语法也与 Python 2.7 向后兼容,因此您的 Python 3 print()函数可以在任一版本中运行。

整数的除法

在 Python 2 中,您键入的任何不带小数的数字,将被视为整数的编程类型。虽然乍看起来这似乎是一个简单的处理编程类型的方法,但有时候当你试图除以整数以期望获得一个带小数位的答案(称为浮点数),如:

5 / 2 = 2.5

然而,在 Python 2 中,整数是强类型的,并且不会变成带小数位的浮点数,即使这样做具有直观上的意义。

当除法/符号的任一侧的两个数字是整数时,Python 2进行底除法,使得对于商x,返回的数字是小于或等于x的最大整数。这意味着当你写下 5 / 2 来对这两个数字相除时,Python 2.7 将返回最大的小于或等于 2.5 的整数,在这种情形下:

a = 5 / 2
print a

Output
2

为解决这个问题,你可以在 5.0 / 2.0 中添加小数位,以得到预期的答案 2.5。

在 Python 3 中,整数除法变得更直观,如

a = 5 / 2
print(a)

Output
2.5

你也可以使用 5.0 / 2.0 返回 2.5,但是如果你想做底层划分,你应该使用 “//” 这样的 Python 3 语法,像这样:

b = 5 // 2
print(b)

Output
2

在 Python 3 中的这种修改使得整数除法更为直观,并且它的特点是不能向后兼容 Python 2.7。

支持 Unicode

当编程语言处理字符串类型时,也就是一个字符序列,它们可以用几种不同的方式来做,以便计算机将数字转换为字母和其他符号。

Python 2 默认使用 ASCII 字母表,因此当您输入“Hello,Sammy!”时, Python 2 将以 ASCII 格式处理字符串。被限定为在多种扩展形式上的数百个字符,用ASCII 进行字符编码并不是一种非常灵活的方法,特别是使用非英语字符时。

要使用更通用和更强大的Unicode字符编码,这种编码支持超过128,000个跨越现今和历史的脚本和符号集的字符,你必须输入

u“Hello,Sammy!”

, 前缀 u 代表 Unicode。

Python 3 默认使用 Unicode,这节省了程序员多余的开发时间,并且您可以轻松地在程序中直接键入和显示更多的字符。因为 Unicode 支持更强大的语言字符多样性以及 emoji 的显示,所以将它作为默认字符编码来使用,能确保全球的移动设备在您的开发项目中都能得到支持。

如果你希望你的 Python 3 代码向后兼容 Python 2,你可以通过在你的字符串的前面保留 “u” 来实现。

后续发展

Python 3 和 Python 2 之间的最大区别不是语法上的,而是事实上 Python 2.7 将在 2020 年失去后续的支持,Python 3 将继续开发更多的功能和修复更多的错误。

最近的发展包括格式化的字符串,类创建的简单定制,和用一种更干净的句法方式来处理矩阵乘法。

Python 3 的后续开发意味着,开发人员可以对问题被及时解决抱有信心,并且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。

其他注意事项

作为一个在 Python 上开始的新手程序员,或作为一个有经验的程序员开始接触 Python 语言,你会考虑在语言学习中你希望实现什么。

如果你希望只是在没有设定项目的情况下学习,你最可能考虑到 Python 3 将得到后续支持和开发,而 Python 2.7 不会。

但是,如果您计划加入已有的项目,则你最有可能希望了解该团队正在使用的 Python 版本,还有如果项目使用的软件包支持不同版本,不同版本应该如何与旧版代码库进行交互,以及项目的实施细节。

如果你正开启了一个项目,你会想,调查哪些包可以使用,以及这些包和哪个版本的 Python 是兼容的。如上所述,尽管早期版本的 Python 3与为 Python 2 版本构建的库的兼容性较低,但是许多库已移植到 Python 3,或致力于在未来四年这样做。

结论

Python 是一种多用途的且良好的编程语言,无论你选择使用 Python 2 还是 Python 3,你都能够做出一些令人兴奋的软件项目。

虽然有几个关键的区别,做一些调整以从 Python 3 跨越到 Python 2 并不是太困难,并且你经常会发现,Python 2.7 可以轻松地运行 Python 3 的代码,尤其是当你刚起步的时候。

重要的是要记住,随着越来越多的开发人员和团队的注意力集中在 Python 3 上,这种语言将变得更加精细,并与程序员不断变化的需求相一致,相较而言,对 Python 2.7 的支持将会越来越少。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

小甲鱼视频中所使用的python3.3.2版本下载地址(windows版本):
游客,如果您要查看本帖隐藏内容请回复

虽然现在版本已经更新到了3.5.3版本,而3.3.2也已经是4年前的版本的(13.05.15版本),但是为了紧跟小甲鱼的步伐,我们还是使用传统的版本。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-28 08:19:00 | 显示全部楼层
新人发帖,谢谢鼓励
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-28 14:43:09 | 显示全部楼层
应该不只是这些变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 21:20:34 | 显示全部楼层
用着3.5版本的好像也没有什么跟教程中不兼容的问题,就是装包的时候注意看支持版本就是了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-3 20:30:29 | 显示全部楼层
感谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-3 20:50:50 | 显示全部楼层
为什么不紧跟时代的步伐用新版呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-3 21:07:20 | 显示全部楼层
又是这种问题
懒得解释了
其实就是
随着未来的到来,3会覆盖2,这是必然的,只是有人不想面对现实。
仅此而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-2 14:31:03 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 10:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表