ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 引言 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 的支持将会越来越少。