Python 3 和 Python 2 之间有许多重要的区别,以下是一些主要的差异:
1. 打印语法
- Python 2:
print是一个语句,不需要括号。print "Hello, world!" - Python 3:
print是一个函数,必须使用括号。print("Hello, world!")
2. 整数除法
- Python 2: 默认的除法行为对于整数类型是地板除(向下取整)。
3 / 2 # 结果是 1 - Python 3: 默认的除法行为返回浮点数结果。
如果需要地板除,可以使用3 / 2 # 结果是 1.5//操作符。
3. Unicode 字符串
- Python 2: 字符串是字节串(
str),如果想要使用 Unicode 字符串,需要在字符串前加u前缀。s = u"Hello" - Python 3: 默认字符串类型是 Unicode,不需要特殊标记。
s = "Hello"
4. xrange 和 range
- Python 2:
range返回一个列表,xrange返回一个生成器(迭代器),适用于较大的序列。range(3) # 返回列表 [0, 1, 2] xrange(3) # 返回生成器 - Python 3:
range返回一个生成器,xrange被移除。range(3) # 返回生成器
5. 错误处理(异常捕获)
- Python 2: 使用
except语法时,捕获异常需要用逗号。try: 1 / 0 except ZeroDivisionError, e: print(e) - Python 3: 异常捕获语法改为
as。try: 1 / 0 except ZeroDivisionError as e: print(e)
6. 标准库变化
- Python 3: 一些模块和方法的名称发生了变化,某些库被重命名或重新组织。
- 例如,
urllib,urllib2被合并为urllib。 ConfigParser被改为configparser。StringIO被移到io模块中。
- 例如,
7. input() 函数
- Python 2:
input()会执行输入的代码,raw_input()是接收字符串的输入。name = raw_input("Enter your name: ") - Python 3:
input()始终返回字符串,移除了raw_input()。name = input("Enter your name: ")
8. next() 函数
- Python 2: 使用
iterator.next()来获取下一个元素。it = iter([1, 2, 3]) it.next() # 返回 1 - Python 3: 使用
next()函数来获取下一个元素。it = iter([1, 2, 3]) next(it) # 返回 1
9. 输入输出
- Python 2: 使用
print语句输出,没有标准的flush参数。 - Python 3:
print()函数支持flush参数,用于刷新输出缓冲区。
10. 字典和迭代器
- Python 2:
dict.keys(),dict.items()和dict.values()返回的是列表。 - Python 3: 返回的是视图对象(iterable),而不是列表。
my_dict = {'a': 1, 'b': 2} my_dict.keys() # 返回 dict_keys,而不是列表
11. 函数返回值注解
- Python 3: 引入了函数的类型注解,可以指定函数参数和返回值的类型。
def add(a: int, b: int) -> int: return a + b
12. 支持的新特性
- Python 3: 引入了许多新特性,如
asyncio(异步编程)、f-string字符串格式化、type hinting等。
总结
Python 3 进行了许多语言改进和优化,修复了 Python 2 中的一些设计缺陷,强化了 Unicode 支持,并引入了许多新特性。因此,Python 3 被认为是未来的标准,建议新项目都使用 Python 3,Python 2 自 2020 年 1 月 1 日起停止官方支持。