Python 2 和 Python 3 之间的主要区别

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

如果您是 Python 新手,您可能会对可用的不同版本感到困惑。尽管 Python 3 是最新一代的语言,但许多程序员仍在使用 Python 2.7,这是 2010 年发布的 Python 2 的最终更新。

目前对于应该使用哪个版本的 Python 的问题没有明确的答案;该决定取决于您想要实现的目标。虽然 Python 3 显然是该语言的未来,但一些程序员选择继续使用 Python 2.7,因为一些较旧的库和包只能在 Python 2 中工作。

为什么有不同版本的 Python?

随着开发人员扩展语言的功能并消除给开发人员带来问题的怪癖,编程语言不断发展。 Python 3 于 2008 年推出,旨在使 Python 更易于使用,并改变它处理字符串的方式以满足当今对语言的需求。最初学习使用 Python 2 编程的程序员有时会发现新的变化难以适应,但新手通常会发现新版本的语言更有意义。

Python 3.0 从根本上不同于以前的 Python 版本,因为它是第一个与旧版本不兼容的 Python 版本。程序员通常不需要担心较小的更新(例如从 2.6 到 2.7),因为它们通常只更改 Python 的内部工作方式,不需要程序员更改语法。 Python 2.7(Python 2 的最终版本)和 Python 3.0 之间的变化更为重要——在 Python 2.7 中工作的代码可能需要以不同的方式编写才能在 Python 3.0 中工作。

Python 2 和 Python 3 之间的主要区别

以下是 Python 2 和 Python 3 之间的一些主要差异,这些差异可以减少新程序员学习新版本语言时的困惑:

  • 打印:在 Python 2 中,“打印”被视为语句而不是函数。无需将要打印的文本括在括号中,但如果需要也可以。这可能会造成混淆,因为 Python 中的大多数其他操作都使用需要将参数放在括号内的函数。如果您将要打印的以逗号分隔的项目列表括起来,也可能导致意外结果。相比之下,Python 3 明确地将“print”视为函数,这意味着您必须以标准方式将需要打印的项目传递给括号中的函数,否则会出现语法错误。一些 Python 2 程序员觉得这个变化很烦人,但它可以帮助防止错误。
  • 整数除法:Python 2 将您键入的小数点后没有任何数字的数字视为整数,这可能会导致在除法过程中出现一些意外结果。例如,如果您在 Python 2 代码中键入表达式 3/2,计算结果将为 1,而不是您预期的 1.5。这是因为 Python 2 假设您希望除法的结果是一个整数,所以它会将计算结果四舍五入到最接近的整数。为了获得结果 1.5,您必须编写 3.0/2.0 来告诉 Python 您希望它返回一个浮点数,即在结果中包含小数点后的数字。 Python 3 默认将 3/2 计算为 1.5,这对于新程序员来说更直观。
  • “For 循环”变量:在以前的 Python 版本中,为在“for 循环”中迭代的变量赋予与全局变量相同的名称可能会导致全局变量的值被更改——您通常不会这样做想。这个恼人的错误已在 Python 3 中得到修复,因此您可以在“for 循环”中使用已用于控制变量的变量名,而不必担心它会泄漏并弄乱其余代码中的变量值.
  • Unicode 字符串:Python 3 默认将字符串存储为 Unicode,而 Python 2 要求您使用“u”标记字符串以将其存储为 Unicode。 Unicode 字符串比 Python 2 默认的 ASCII 字符串更通用,因为它们可以存储来自外语的字母以及表情符号和标准的罗马字母和数字。如果你想确保你的 Python 3 代码与 Python 2 兼容,你仍然可以用“u”标记你的 Unicode 字符串。
  • 引发异常:Python 3 需要不同的语法来引发异常。如果要向用户输出错误信息,需要使用语法:

提高 IOError(“你的错误信息”)

此语法也适用于 Python 2。以下代码仅适用于 Python 2,不适用于 Python 3:

提高 IOError,“你的错误信息”

还有许多其他示例表明 Python 2 和 Python 3 之间的语法存在细微差别。Python-Future 提供了关键语法差异备忘单,可帮助您编写与两个版本的 Python 兼容的代码。除了语法差异之外,还有其他关键差异,例如两个版本的 Python 如何处理字符串,如上所述。 Python 3.3 的执行速度与 Python 2.7 大致相同,尽管一些基准测试表明新语言的速度要快得多。

选择一个版本归结为您需要的库

Python 2 存在的时间更长,这可能是一个优势,并且并非所有可用于 Python 2 的库都已移植到 Python 3。另一方面,一些开发人员正在为 Python 3 创建可能与 Python 2 不兼容的库. 对于许多人来说,是使用 Python 2 还是 Python 3 的决定取决于他们想要使用哪些库。当然,如果您学习 Python 是为了处理现有的 Python 应用程序,那么学习使用编写该软件的任何 Python 版本都是有意义的。

许多人认为 Python 3 是 Python 2 的改进版本,因为一些更新消除了程序员常犯的错误(参见上面的打印示例)。如上所述,一些变化使 Python 3 更容易为初学者所理解。因此,不需要使用任何特定库的新程序员可能会考虑学习 Python 3,因为随着 Python 2 的更新停止和对旧语言的支持,未来几年可能会逐渐转向新语言语言版本减少。使用统计显示,使用 Python 3 的程序员数量已经在逐渐增加。

除非有明确的理由选择一个版本的 Python 而不是另一个版本,例如需要处理用 Python 2 编写的现有代码,否则不值得为这个决定担心太多。大多数语法在该语言的每个版本中都是相同的。如果您需要从 Python 2 切换到 Python 3,反之亦然,您应该不会花太长时间来熟悉差异,例如 print 语句/函数的更改以及 Python 处理整数除法的方式。

Python 3 正在慢慢获得更多的开发人员

在 2014 年对 6,746 名程序员进行的一项调查中,大约三分之二的人表示他们使用 Python 2 编写的代码多于 Python 3。但是,Python 3 正在迅速取得进展; 2013 年,只有 22% 的人表示他们使用新版本的语言编写了更多代码。

当程序员开始一个个人项目时,只有不到一半的人使用 Python 3,其余的人更愿意坚持使用 Python 2。在不切换到 Python 3 的原因中,人们提到依赖仅适用于 Python 2 的包,并且有一个大量用 Python 2 编写的遗留代码需要升级。其他人声称他们根本没有动力转向 Python 3,因为 Python 2 满足了他们的需求,并且他们已经习惯了使用它。

Python 2 与 Python 3:总结

从 Python 2 到 Python 3 的转换进展缓慢,但正在进行中。您可以使用该语言的任何一个版本成功地编写有效、有用和高效的代码,因此在您入门 Python 时无需为学习哪个版本而苦恼。但是,最好注意 Python 2 和 Python 3 之间存在实质性差异,以防您需要处理以您不太熟悉的语言版本编写的代码。

如果您是一名正在考虑从 Python 2 切换到 Python 3 的 Python 程序员,那么 Python 3 中的一些改进可能会让您的努力物有所值。在将 Python 2 项目移植到 Python 3 之前,请检查它所依赖的库是否在 Python 3 中受支持。

随着时间的推移,以及 Python 3 新更新的发布,使用 Python 3 而不是 Python 2 的程序员比例可能会增加。您可以决定是现在加入 Python 3 的趋势,还是继续使用 Python 2,直到您的项目要求迫使您做出转换。