Python 2.x 和 Python 3.x 版本之间有很多显著的差异,特别是在语法和库方面。Python 3.x 是 Python 2.x 的继任者,并且它做了一些设计决策来改进语言的一致性、性能和功能。不过,这些改动并不完全向后兼容,因此在迁移时可能会遇到一些问题。
目录
1. 打印语句
Python 2.x:
在 Python 2.x 中,print
是一个语句,而不是一个函数。
# Python 2.x
print "Hello, world!"
Python 3.x:
在 Python 3.x 中,print
被作为一个函数来使用,需要加括号。
# Python 3.x
print("Hello, world!")
2. 字符串处理
Python 2.x:
Python 2.x 中,字符串分为 ASCII 字符串和 Unicode 字符串。默认字符串是 ASCII 字符串,需要通过 u'...'
语法声明 Unicode 字符串。
# Python 2.x
ascii_str = "Hello"
unicode_str = u"Hello"
Python 3.x:
在 Python 3.x 中,所有的字符串都是 Unicode 字符串,默认使用 Unicode 编码。字节串需要使用 b'...'
语法。
# Python 3.x
unicode_str = "Hello"
byte_str = b"Hello"
3. 整数除法
Python 2.x:
在 Python 2.x 中,整数除法会丢弃小数部分,返回整数结果。
# Python 2.x
result = 5 / 2 # 结果是 2
Python 3.x:
在 Python 3.x 中,整数除法会返回浮动结果。如果需要整数结果,需要使用 //
运算符。
# Python 3.x
result = 5 / 2 # 结果是 2.5
integer_result = 5 // 2 # 结果是 2
4. Unicode 支持
Python 2.x:
在 Python 2.x 中,unicode
类型是明确的,而 str
是 ASCII 字符串类型。为了进行字符编码处理,需要显式地进行编码和解码。
# Python 2.x
unicode_str = u"Hello"
encoded_str = unicode_str.encode('utf-8')
Python 3.x:
在 Python 3.x 中,所有的字符串都是 Unicode 字符串(str
)。对于字节数据,需要使用 bytes
类型。
# Python 3.x
unicode_str = "Hello"
encoded_str = unicode_str.encode('utf-8') # 编码为字节
decoded_str = encoded_str.decode('utf-8') # 解码为字符串
5. 输入函数
Python 2.x:
在 Python 2.x 中,input()
会尝试评估用户输入的内容。如果你希望接受字符串输入,需要使用 raw_input()
。
# Python 2.x
user_input = raw_input("Enter something: ") # 返回字符串
eval_input = input("Enter something: ") # 返回评估结果
Python 3.x:
在 Python 3.x 中,input()
函数返回字符串,不再自动评估输入内容。raw_input()
被移除。
# Python 3.x
user_input = input("Enter something: ") # 返回字符串
6. 迭代器与生成器
Python 2.x:
Python 2.x 中,许多标准库中的方法,如 range()
和 map()
,返回的是列表而不是迭代器。
# Python 2.x
my_list = range(5) # 返回列表 [0, 1, 2, 3, 4]
Python 3.x:
在 Python 3.x 中,range()
和 map()
返回的是迭代器,而不是列表。
# Python 3.x
my_range = range(5) # 返回 range 对象,不是列表
7. 异常处理
Python 2.x:
在 Python 2.x 中,except
子句使用 ,
来捕获异常。
# Python 2.x
try:
# some code
except ValueError, e:
print(e)
Python 3.x:
在 Python 3.x 中,except
子句使用 as
来捕获异常。
# Python 3.x
try:
# some code
except ValueError as e:
print(e)
8. 标准库变化
Python 3.x 对一些标准库进行了重组和重命名,一些库在 Python 3 中被移除或替换。
8.1 urlparse
模块
在 Python 2.x 中,urlparse
位于 urllib
模块中。
# Python 2.x
from urlparse import urlparse
在 Python 3.x 中,urlparse
被移到了 urllib.parse
模块中。
# Python 3.x
from urllib.parse import urlparse
8.2 dict
方法的变化
Python 3.x 中,dict
的 iteritems()
, iterkeys()
, 和 itervalues()
方法被移除,改为使用 items()
, keys()
, 和 values()
直接返回迭代器。
# Python 2.x
my_dict = {'a': 1, 'b': 2}
for key, value in my_dict.iteritems():
print(key, value)
# Python 3.x
for key, value in my_dict.items():
print(key, value)
9. Python 2.x 和 3.x 的互操作性
虽然 Python 2.x 和 3.x 在许多方面不兼容,但可以使用 __future__
模块在 Python 2.x 中引入一些 Python 3.x 的功能。例如,可以通过以下方式使 Python 2.x 的 print
语句变为函数:
# Python 2.x
from __future__ import print_function
10. 参考资料
出站链接
站内链接
以上是 Python 2.x 和 Python 3.x 之间的一些主要区别。虽然 Python 2.x 仍然在某些旧的项目中被使用,但从 2020 年起,Python 2.x 已不再获得官方支持。因此,建议新项目使用 Python 3.x。
发表回复