Python 2 和 Python 3 是 Python 语言的两个主要版本,它们之间存在一些关键的区别。以下是一些主要的差异点,可以帮助你区分它们:
print 函数:
Python 2 中,`print` 是一个语句,可以直接使用,例如 `print "Hello, World!"`。
Python 3 中,`print` 是一个函数,必须使用括号,例如 `print("Hello, World!")`。
整数除法:
Python 2 中,整数除法会返回一个整数,例如 `3 / 2` 结果为 `1`。
Python 3 中,整数除法会返回一个浮点数,例如 `3 / 2` 结果为 `1.5`。
Unicode 字符串:
Python 2 中,字符串默认是 ASCII 编码,有两种类型:`str`(8 位 ASCII 字符)和 `unicode`(宽字符)。
Python 3 中,字符串默认是 Unicode 编码,只有一种类型:`str`。
异常处理:
Python 2 中,`dict` 类型有 `has_key` 方法来检查键是否存在。
Python 3 中,`dict` 类型移除了 `has_key` 方法,使用 `in` 关键字来检查键是否存在。
迭代器:
Python 2 中,`xrange` 函数返回一个列表,而 `range` 函数返回一个列表。
Python 3 中,`range` 函数返回一个迭代器,更加节省内存,而 `xrange` 被移除。
模块导入:
Python 2 中,相对路径的模块导入可能导致问题。
Python 3 中,相对路径的模块导入被禁止,必须使用绝对路径。
内置函数 `map` 和 `reduce`:
Python 2 中,`map` 和 `reduce` 是内置函数。
Python 3 中,`map` 返回一个迭代器,`reduce` 被移到了 `functools` 模块。
缩进:
Python 3 中,强制要求使用一致的缩进方式,通常是一个 Tab 键代替多个空格。
要确定一个 Python 脚本使用的是 Python 2 还是 Python 3,你可以检查上述的某些特性。如果代码中使用了 `print` 语句,或者整数除法返回整数,那么它很可能是 Python 2。如果代码中使用了 `print` 函数,整数除法返回浮点数,以及使用了 Unicode 字符串,那么它很可能是 Python 3。
需要注意的是,有些 Python 2 的代码可以通过 `from __future__ import print_function` 语句来兼容 Python 3,但这通常是为了向后兼容,并不是真正的 Python 3 代码。