Python 2 和 Python 3
如果你是在 2020 年阅读这篇文章,那么讨论这个问题是没有意义的,除非你在某个项目上工作,这个项目仍然运行在 Python 2.x 的某个版本上
当我们说 Python 2.x 时,我们指的是 Python 2.7,当我们说 Python 3.x 时,我们指的是 Python 3.7 版本。
Python 在 2008 年发布了 Python 3 版本的编程语言。最初对采用 Python 3 有过犹豫,但现在不再犹豫了。
几乎所有 python 的库/模块都已经迁移到 python 3,或者已经兼容 python 3.x 版本。
所以现在,使用 Python 2.x 版本是没有意义的,除非您正在您的应用中处理一些仍然运行在 Python 2.x 版本上的遗留代码。
Python 2 和 Python 3 之间的重要区别
尽管与 Python 2 相比,该语言的新版本(即 Python 3)有许多变化。如果您将代码从 Python 2.7(或任何其他 2.x 版本)移植到 Python 3.x 版本,我们将讨论最重要的问题。
新的print()方法语法
是的,这是最明显的变化之一,因为当你用 python 编码时,print语句被大量使用。
在 python 2.x 中,不需要在print关键字后添加括号来括住要打印的文本,但是从 python 的 3.x 版本来看,正确的语法是print("TEXT TO BE PRINTED")。
让我们看一些代码示例来理解:
# In python 2.x
print "Text to be printed"
要打印的文本
而在 Python 3.x 版本的情况下,相同的代码将变成,
# In python 3.x
print("Text to be printed")
要打印的文本
除法运算符(/)的变化
Python 2.x 中的除法运算符返回了一个整数结果值,而在 Python 3.x 中,您现在得到了一个更精确的浮点结果值。
让我们看一些代码示例来理解:
# In python 2.x
print 5/2
Two
而在 Python 3.x 版本的情况下,相同的操作将返回一个浮点值,
# In python 3.x
print(5/2)
Two point five
功能xrange()不再支持
在 Python 2.x 中,如果我们想要生成一个范围内的数字列表,我们可以使用range函数返回一个列表,例如range(2)将返回列表[0,1],或者使用xrange()函数,该函数不返回列表,但返回一个迭代器对象,您可以在其上进行迭代并获得数字的范围。简单来说,xrange()函数不是一次创建一个数字列表并返回,而是只在需要的时候生成范围内的数字,也就是说,当我们使用循环时。
Python 3.x 的情况下,没有xrange()功能。range()功能完成了xrange()以前做的事情。
了解了 python 中迭代器和 Iterables 的概念之后,你会更好的理解这个变化。
错误处理
python 中错误处理的try和except块的用法在语法上有一点变化。
让我们先看一些代码示例来看看变化,
# In python 2.x
try:
# some statement that may cause error
except SomeError, err:
print err, "Error Occured"
而在 Python 3.x 版本的情况下,在except块中,我们现在使用带有错误类型及其变量对象的as关键字,
# In python 3.x
try:
# some statement that may cause error
except SomeError as err:
print(err, "Error Occured")
这一改变是为了使语法更加易读和用户友好。如果您是 Python 中错误和异常处理的新手,可以在本教程系列的后面部分了解它。
一些更值得一提的变化
以下是我们想要提及的更多变化:
- 在 Python 2.x 中,隐式或默认的字符串编码是 ASCII,而在 Python 3.x 中,它是 Unicode。
- python 2.x 版本早期提供的许多 Python 库和模块可能不适用于 Python 3.x,但大多数都适用。
- 有了 Python 3.x,语言的语法变得更加用户友好。
结论
我们建议您使用 Python 3.x 版本进行学习。虽然在我们的一些教程中你可能会发现print语句用的是旧语法,但是现在你知道 Python 3.x 中print()的正确语法是什么了,所以编辑一下代码;)