首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》附录 B Python 2 与 Python 3 的差异

关灯直达底部

在本书中,我们提到了 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 了。这个函数会返回字符串,但不会尝试对输入的字符串做任何计算(比如将它转成 intfloat)。

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,我们祝你好运。