Python的2比Python 3的:现实思考

Python是一个非常可读的通用编程语言。而Python 2.7和Python 3的份额许多相似的功能,他们不应该被认为是完全可以互换的。本文将带你穿越的主要区别就是否在Python 2或Python 3中,替你开发项目选择时要考虑的。

介绍

Python是一种极具可读性和通用性的编程语言。 由于英国喜剧组织Monty Python的灵感,它是Python开发团队的一个重要的基础目标,使语言有趣地使用。 易于设置,并以相对直接的风格编写,对错误提供即时反馈,Python是初学者的不错选择。

因为Python是一个多属性语言 - 也就是说,它支持多种编程风格,包括脚本和面向对象 - 它适合于通用目的。 组织越来越多地在工业中使用联合太空联盟(NASA的主要班车支持承包商)和工业光和魔术(VFX和Lucasfilm的动画工作室),Python为那些寻找额外的编程语言的人提供了很大的潜力。

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

总体概述

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

Python 2

发布于2000年年底,Python 2通过实施PEP(Python增强提议)来表示一个比早期版本的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 3支持的Python包的数量显示,在撰写本文时,包括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用于解析命令行选项,更方便类collections

由于Python 2.7作为Python 2和Python 3.0早期迭代之间的版本的独特位置,它因为与许多鲁棒库的兼容性而持久保存为程序员的一个非常受欢迎的选择。 当我们今天讨论Python 2时,我们通常指的是Python 2.7版本,因为它是最常用的版本。

然而,Python 2.7被认为是一种遗留语言,它的继续开发,今天主要包括错误修复,将在2020年完全停止。

主要差异

虽然Python 2.7和Python 3共享许多类似的功能,但它们不应该被认为是完全可互换的。 虽然你可以在任一版本中编写好的代码和有用的程序,但是值得了解的是,在代码语法和处理方面会有一些相当大的差异。

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

打印

在Python 2, print被视为语句而不是一个函数,这是混乱的一个典型面积其它很多在Python操作需要内部括号中执行参数。 如果你希望你的控制台打印出Sammy the Shark is my favorite sea creature在Python 2,你可以用下面这样做的print语句:

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()函数可以在任何版本上运行。

除以整数

在Python 2,你键入不带小数的任何数字被视为称为整数编程类型。 虽然乍一看这似乎是一个简单的方法来处理编程类型,当你试图分裂整数在一起,有时你希望得到与小数的答案(称为浮动 ),如:

5 / 2 = 2.5

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

当在隔板的两侧的两个数字/符号是整数,Python 2中做地板师使得用于商x返回的数是小于或等于最大的整数x 这意味着,当写5 / 2至两个数划分,Python的2.7返回的最大的整数小于或等于2.5,在这种情况下, 2

a = 5 / 2
print a
2

要覆盖这一点,你可以添加小数为5.0 / 2.0 ,以获得预期的答案2.5

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

a = 5 / 2
print(a)
2.5

您仍然可以使用5.0 / 2.0回到2.5 ,但如果你想要做地板师,你应该使用的是Python 3语法// ,就像这样:

b = 5 // 2
print(b)
2

这一修改在Python 3做用整数更直观划分和是一个特点,就是向后与Python 2.7兼容。

Unicode支持

当编程语言处理字符串类型-即字符序列-他们可以在几个不同的方式做到这一点,以便计算机数字转换成字母和其他符号。

Python 2中缺省使用ASCII字母,所以当你键入"Hello, Sammy!"的Python 2将处理字符串作为ASCII。 限制为几百个字符在各种扩展形式,ASCII不是一个非常灵活的方法来编码字符,特别是非英语字符。

要使用更灵活和强大的Unicode字符编码,横跨当代和历史悠久的脚本和符号集支持超过128000个字符,你必须输入u"Hello, Sammy!"u前缀站在对Unicode。

Python 3默认使用Unicode,这节省了程序员的额外开发时间,并且您可以轻松地在程序中直接键入和显示更多字符。 由于Unicode支持更大的语言字符多样性以及emojis的显示,使用它作为默认字符编码确保世界各地的移动设备在您的开发项目中很容易支持。

如果你想你的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的支持将会减少。