Python 3.9自2.0以来主要的变化有哪些?
从 Python 2.0 到 Python 3.9 的过渡跨越了多个版本,其中包含了许多重大的功能改进、语法变更以及性能优化。以下是主要的变化和更新,按照 Python 3.x 的版本逐步展开,重点概述了各版本的主要变化。
1. Python 3.0 (2008)
Python 3.0 是一次 不兼容的重大更新,标志着 Python 语言的一个新纪元。它彻底清理了 Python 2.x 的一些设计上的问题。
主要变化:
print变成函数:- Python 2.x 中,
print是语句,而在 Python 3.x 中,它成为了函数,必须使用括号:python print("Hello") - 整数除法:
- Python 2.x 中,整数除法会返回整数,而 Python 3.x 中,整数除法默认返回浮点数。如果需要地板除,使用
//:python 3 / 2 # 输出 1.5 在 Python 3.x 中 3 // 2 # 输出 1 - 字符串处理:
- 默认的字符串类型从 ASCII 转变为 Unicode,因此所有的字符串在 Python 3.x 中都是 Unicode 类型。字节字符串需要用
b"..."表示。 - 移除
xrange(): - Python 3.x 中,
range()变成了一个惰性迭代器,代替了 Python 2.x 中的range()和xrange()。 input()函数变更:- 在 Python 2.x 中,
input()会将输入解析为 Python 表达式,而raw_input()用来获取字符串输入。Python 3.x 中,input()总是返回字符串,raw_input()被移除。
2. Python 3.1 – 3.4 (2009 – 2014)
这些版本主要是对 Python 3.0 的稳定性进行修复,并引入了一些新特性,改善了语言的性能和开发体验。
主要变化:
- 引入
argparse: argparse库成为了标准库的一部分,用于命令行参数的解析,取代了 Python 2.x 中的optparse。- 新式类和内存优化:
- Python 3 对类的实现进行了优化,内存消耗更少,特别是在对象存储和管理方面。
bytes和bytearray:- 引入了
bytes和bytearray类型,处理二进制数据更加明确。
3. Python 3.5 (2015)
Python 3.5 引入了许多新的特性,使得 Python 3 更加现代化和易用。
主要变化:
async和await关键字:- Python 3.5 引入了
async和await关键字,支持原生的异步编程,使得 Python 可以更加高效地处理 I/O 密集型任务。 - 这是 Python 中异步编程模型的关键突破。
- 示例:
python async def fetch_data(): await some_async_function() - 类型注解:
- Python 3.5 引入了类型注解,允许开发者为函数参数和返回值指定类型:
python def greet(name: str) -> str: return f"Hello, {name}" - 新的
matrix multiplication操作符@: - 引入了新的
@操作符,用于矩阵乘法(NumPy 中常见),这个特性对科学计算非常有用。python import numpy as np result = A @ B
4. Python 3.6 (2016)
Python 3.6 引入了多项便利性和性能的改进,尤其是在字符串格式化和字典操作方面。
主要变化:
- f-string(格式化字符串):
- Python 3.6 引入了 f-string,这是一种新的字符串格式化方法,简洁且高效:
python name = "Alice" greeting = f"Hello, {name}!" - 字典顺序保持插入顺序:
- 从 Python 3.6 开始,字典在插入顺序上是有序的。这在 Python 3.7 中成为了语言的规范。
secrets模块:- 引入了
secrets模块,用于生成安全的随机数,适用于密码学用途。
5. Python 3.7 (2018)
Python 3.7 继续增强了语言的简洁性和性能,特别是类型注解和数据类(dataclass)。
主要变化:
- 数据类(dataclass):
- Python 3.7 引入了
dataclasses模块,使得创建类更加简洁,自动生成__init__()和其他常见方法:python from dataclasses import dataclass @dataclass class Person: name: str age: int asyncio改进:asyncio得到了改进,特别是在异常处理和协程的支持方面。- 更快的字节码和性能改进:
- Python 3.7 在性能上进行了多项优化,尤其是在对象创建、属性访问等方面。
6. Python 3.8 (2019)
Python 3.8 带来了许多新特性,其中一些是语法上的增强和一些性能优化。
主要变化:
- 海象运算符
:=: - Python 3.8 引入了海象运算符(walrus operator),用于在表达式中同时赋值和返回值,常用于循环和条件表达式:
python if (n := len(data)) > 10: print(f"List is too long ({n} elements)") - 位置参数:
- Python 3.8 引入了位置参数(
/)语法,强制某些参数只能通过位置传递,而不能通过关键字传递:python def greet(name, /): print(f"Hello, {name}") f-string支持等式:- f-string 支持等式显示(
f'{expr=}'),使得调试和日志记录变得更加简便:python x = 42 print(f'{x=}') # 输出: x=42
7. Python 3.9 (2020)
Python 3.9 进一步增强了语言的简洁性和一些标准库的改进。
主要变化:
- 字典合并和更新运算符:
- Python 3.9 引入了字典的合并(
|)和更新(|=)运算符:python dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} result = dict1 | dict2 # 合并字典 print(result) # 输出: {'a': 1, 'b': 3, 'c': 4} - 移除旧的模块和功能:
- 删除了 Python 2.x 中的一些过时模块和功能,例如
collections.OrderedDict的方法已经被标准化。 - Type Hinting 改进:
- 在 Python 3.9 中,类型提示得到了进一步的增强,支持更多的语法,例如使用
list和dict来指定类型:python def greet(names: list[str]) -> dict[str, int]: return {name: len(name) for name in names}
总结
从 Python 2.0 到 Python 3.9 的更新,Python 语言经历了 不兼容的大幅度改进,包括:
- 语法改动:
print函数、整数除法的改变、类型注解、异步编程支持等。 - 性能提升:内存优化、字节码执行速度的提升、
asyncio和异步编程的引入。 - 库的改进和清理:移除不必要的旧库,增加了对现代编程风格的支持。
- 类型注解:Python 3.x 引入并完善了类型注解,使得代码更加可读和可维护。
这些变化使得 Python 变得更加现代化、高效、易用,并为开发者提供了更强大的功能和更多的编程可能性。