在本书中,我们提到了 Python 2 与 Python 3 的几处差异。本书使用的是 Python 2,但我们也希望你能读懂 Python 3 的代码,并具备让代码兼容 Python 3 的能力。本附录只讨论与本书内容有关的 Python 特性的差异。(比如,Python 3 处理 Unicode 字符串的方式是不同的,但因为我们在本书中没有涉及 Unicode,所以不讨论这部分差异。)
在这个前提下,Python 3 与 Python 2 存在以下一些差异。
print
在 Python 3 中,print
是一个函数,这意味着你不能这样写:
print "Hello, World!"
而需要这样写:
print("Hello, World!")
还有一些与此相关的差异。你不能像在 Python 2 中那样,在结尾处使用一个逗号,使下一个 print
语句输出的内容与本次输出的内容显示在同一行:
print "Hello",print "World!"
在 Python 3 中,你需要这样做:
print("Hello", end=")print("World!")
你也可以给 end
参数传不同的值,但是用到的情况非常少。如果你有兴趣的话,可以查一下 Python 3 的文档。
你可能已经注意到了,print
在 Python 3 和 Python 2 代码中的高亮颜色是不一样的。这是因为在 Python 2 中,print
是一个关键字,而在 Python 3 中,print
是一个函数。
input
Python 2 中的 raw_input
在 Python 3 中改名为 input
了。这个函数会返回字符串,但不会尝试对输入的字符串做任何计算(比如将它转成 int
或 float
)。
Python 2 中的 input
函数会对输入进行计算(如果可能的话会将它转换成数字),这个函数在 Python 3 中不存在了。
这意味着在 Python 2 中的代码
your_name = raw_input("Enter your name:")
在 Python 3 中要这样写:
your_name = input("Enter your name:")
在 Python 2 中的代码
age = input("Enter your age:")
在 Python 3 中要这样写:
age = int(input("Enter your age:")
整除
Python 3 中第三点主要的变化是处理整除的方式。是否还记得我们在第 3 章讨论过这个话题?在 Python 2 中,代码运行结果是这样的:
>>> print 5/22
Python 2 在进行除法运算时会默认向下取整。Python 3 会默认进行浮点数除法,所以在 Python 3 中是这样的:
>>> print(5/2)2.5
如果你想在 Python 3 中进行整除运算,可以使用双斜线,像这样:
>>> print(5//2)2
取余操作符(%
)用于计算整数相除的余数,其在 Python 3 中的工作方式和在 Python 2 中一样。
Python 2:>>> print 5%21Python 3:>>> print(5%2)1
range
在 Python 2 中,range
函数返回一个列表。但在 Python 3 中,range
返回一个 range
对象。如果是循环访问的话,Python 3 中 range
对象的工作方式和 Python 2 中的列表基本一样。但如果你想打印它,是不能看到 range
对象中的各个单独的值的。
Python 2:>>> print range(5)[0, 1, 2, 3, 4]Python 3:>>> print(range(5))range(0, 5)
Python 2 到 Python 3 的转换
有一个名为 2to3 的工具会尝试自动将 Python 2 代码转换为 Python 3 代码。如果你在使用 Python 3,可以拿本书中的代码清单试一下。很多代码在转换后都能正常工作。但我们没有测试本书中的代码经 2to3 转换后能否正常工作,所以我们不保证它适用于本书所有的代码清单。
尽管 Python 3 是 Python 的最新版本,但 Python 2 现在还是被广泛支持。因为非常非常多的人编写的 Python 2 代码不能在 Python 3 中正常工作,所以很多公司和个人都继续使用 Python 2。有很多模块还没有升级,无法支持 Python 3,甚至有一些模块从来没有升级过。Python 2 的资源要远比 Python 3 的多,这也是我们决定在本书中继续使用 Python 2 的一个原因。但如果你想尝试在自己的编程项目中使用 Python 3,我们祝你好运。