Python2与Python3:实际考虑
- Introduction Python 是一种可读性极强且用途广泛的编程语言。 这个名字的灵感来自英国喜剧团体 Monty Python,Python 开发团队的一个重要的基本目标是让该语言的使用变得有趣。 Python 易于设置,并且以相对简单的风格编写,并且对错误有即时反馈,是初学者的绝佳选择。
由于 Python 是一种多范式语言——也就是说,它支持多种编程风格,包括脚本和面向对象——它非常适合通用用途。 联合太空联盟(NASA 的主要航天飞机支持承包商)和工业光魔(卢卡斯影业的 VFX 和动画工作室)等组织越来越多地在工业中使用 Python,Python 为那些希望获得额外编程语言的人提供了很大的潜力.
Python 于 1980 年代后期开发并于 1991 年首次发布,由 Guido van Rossum 撰写,他在社区中仍然非常活跃。 作为 ABC 编程语言的继承者,Python 的第一次迭代已经包括异常处理、 函数 和 继承类。 1994 年,一个名为 comp.lang.python 的重要 Usenet 新闻组讨论论坛成立,Python 的用户群不断增长,为 Python 成为开源开发中最受欢迎的编程语言之一铺平了道路。
- General 概述 在研究与 Python 2 和 Python 3 相关的潜在机会(以及它们之间的主要编程差异)之前,让我们先了解一下 Python 最新主要版本的背景。
- Python 2 发布于 2000 年底,Python 2 标志着一个比早期版本的 Python 更透明和包容的语言开发过程,并实现了 PEP(Python 增强提案),这是一种向 Python 社区成员提供信息或描述的技术规范语言的一个新特点。
此外,Python 2 包含更多的编程特性,包括循环检测垃圾收集器以自动化内存管理、增加的 Unicode 支持以标准化字符,以及基于现有列表创建列表的列表推导。 随着 Python 2 的不断发展,添加了更多功能,包括在 Python 2.2 版本中将 Python 的类型和类统一到一个层次结构中。
- Python 3 Python 3 被视为 Python 的未来,是目前正在开发的语言版本。 Python 3 于 2008 年底发布,这是一次重大改革,以解决和修正该语言先前版本的内在设计缺陷。 Python 3 开发的重点是清理代码库并消除冗余,从而清楚地表明只有一种方法可以执行给定的任务。
对 Python 3.0 的主要修改包括将 print
语句更改为内置函数,改进整数划分方式,并提供更多 Unicode 支持。
起初,由于语言不向后兼容 Python 2,Python 3 被慢慢采用,需要人们决定使用哪个版本的语言。 此外,许多包库仅适用于 Python 2,但随着 Python 3 背后的开发团队重申对 Python 2 的支持已经结束,更多的库已移植到 Python 3。 现在提供 Python 3 支持的 Python 包的数量可以显示 Python 3 的采用率增加,在撰写本文时,其中包括 360 个最流行的 Python 包中的 339 个。
- 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
,以及collections
中更方便的类。
- 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 版的增强模块,例如支持测试自动化的
由于 Python 2.7 作为 Python 2 和 Python 3.0 早期迭代之间的一个版本的独特地位,由于它与许多强大的库的兼容性,它一直是程序员的一个非常受欢迎的选择。 当我们今天谈论 Python 2 时,我们通常指的是 Python 2.7 版本,因为它是最常用的版本。
然而,Python 2.7 被认为是一种遗留语言,它的持续开发(今天主要包括错误修复)将在 2020 年完全停止。
- Key 差异 虽然 Python 2.7 和 Python 3 具有许多相似的功能,但不应将它们视为完全可互换的。 尽管您可以在任一版本中编写良好的代码和有用的程序,但值得理解的是,代码语法和处理方式会有一些相当大的差异。
下面是一些示例,但您应该记住,随着您继续学习 Python,您可能会遇到更多的语法差异。
- Print 在 Python 2 中,
print
被视为语句而不是函数,这是一个典型的混淆区域,因为 Python 中的许多其他操作需要括号内的参数才能执行。 如果您希望控制台在 Python 2 中打印出Sammy the Shark is my favorite sea creature
,您可以使用以下print
语句来实现:
- Print 在 Python 2 中,
print "Sammy the Shark is my favorite sea creature"
在 Python 3 中,print()
现在被显式地视为一个函数,因此要打印出上面相同的字符串,您可以使用函数的语法简单轻松地执行此操作:
print("Sammy the Shark is my favorite sea creature")
这一变化使 Python 的语法更加一致,也使得在不同的打印函数之间进行更改变得更加容易。 方便的是,print()
语法也向后兼容 Python 2.7,因此您的 Python 3 print()
函数可以在任一版本中运行。
- Division with Integers 在 Python 2 中,您键入的任何不带小数的数字都被视为称为 integer 的编程类型。 乍一看,这似乎是一种处理编程类型的简单方法,但当您尝试将整数相除时,有时您希望得到带小数位的答案(称为 float),如下所示:
5 / 2 = 2.5
但是,在 Python 2 中,整数是强类型的,即使在直观的情况下也不会更改为带小数位的浮点数。
当除法 /
符号两侧的两个数字是整数时,Python 2 会执行 下除法 ,因此对于商 x
,返回的数字是减去的最大整数大于或等于 x
。 这意味着当您编写 5 / 2
来除两个数时,Python 2.7 返回小于或等于 2.5 的最大整数,在本例中为 2
:
a = 5 / 2 print a
Output2
要覆盖这一点,您可以像 5.0 / 2.0
一样添加小数位以获得预期的答案 2.5
。
在 Python 3 中, 整数除法 变得更加直观,如下所示:
a = 5 / 2 print(a)
Output2.5
你仍然可以使用 5.0 / 2.0
来返回 2.5
,但是如果你想进行地板除法,你应该使用 Python 3 的 //
语法,像这样:
b = 5 // 2 print(b)
Output2
Python 3 中的这种修改使得除以整数更加直观,并且是 not 向后兼容 Python 2.7 的功能。
- Unicode 支持 当编程语言处理 string 类型(即字符序列)时,它们可以以几种不同的方式进行处理,以便计算机可以将数字转换为字母和其他符号。
Python 2 默认使用 ASCII 字母,所以当你输入 "Hello, Sammy!"
Python 2 会将字符串作为 ASCII 处理。 ASCII 在各种扩展形式中最多只能有几百个字符,对于编码字符,尤其是非英文字符,ASCII 并不是一种非常灵活的方法。
要使用更通用、更强大的 Unicode 字符编码,它支持超过 128,000 个字符,涵盖当代和历史脚本和符号集,您必须键入 u"Hello, Sammy!"
,其中 u
前缀代表 Unicode。
Python 3 默认使用 Unicode,这为程序员节省了额外的开发时间,并且您可以轻松地直接在程序中键入和显示更多字符。 由于 Unicode 支持更大的语言字符多样性以及表情符号的显示,因此将其用作默认字符编码可确保您的开发项目轻松支持世界各地的移动设备。
但是,如果您希望 Python 3 代码与 Python 2 向后兼容,则可以将 u
保留在字符串之前。
- Continued Development Python 3 和 Python 2 之间最大的区别不是语法上的区别,而是 Python 2.7 将在 2020 年失去持续支持而 Python 3 将继续开发并提供更多功能和更多错误修复的事实。
最近的发展包括 格式化的字符串文字 、更简单的 类创建 以及处理矩阵乘法的更简洁的语法方式。
Python 3 的持续开发意味着开发人员可以依靠及时修复问题,并且随着时间的推移内置更多功能,程序可以更有效。
- 要考虑的其他要点 作为新程序员或 Python 语言新手的经验丰富的程序员,您将需要考虑在学习该语言时希望达到的目标。
如果您只想在没有固定项目的情况下学习,您可能最希望考虑到 Python 3 将继续得到支持和开发,而 Python 2.7 则不会。
但是,如果您计划加入现有项目,您可能最想了解团队正在使用的 Python 版本,不同版本如何与遗留代码库交互,项目使用的包是否受支持不同的版本,以及项目的实现细节是什么。
如果您正在开始一个您心目中的项目,那么调查哪些包可以使用以及它们与哪个版本的 Python 兼容是值得的。 如上所述,尽管早期版本的 Python 3 与为 Python 2 版本构建的库的兼容性较差,但许多已经移植到 Python 3 或承诺在未来四年内这样做。
- Conclusion Python 是一种通用且有据可查的编程语言,无论您选择使用 Python 2 还是 Python 3,您都将能够从事令人兴奋的软件项目。
尽管有几个关键的区别,但通过一些调整从 Python 3 迁移到 Python 2 并不难,而且您经常会发现 Python 2.7 可以轻松运行 Python 3 代码,尤其是在您刚开始时。 您可以通过阅读教程 如何将 Python 2 代码移植到 Python 3 来了解有关此过程的更多信息。
重要的是要记住,随着更多开发人员和社区的注意力集中在 Python 3 上,该语言将变得更加精炼并符合程序员不断变化的需求,而对 Python 2.7 的支持将越来越少。