Python3.9、Python3.10、Python3.11和Python3.12的发展历程和区别
文章目录
1. Python 3.9(2020年10月发布)
主要新特性
引入了新的字典运算符 |
和 |=
,简化了字典的合并和更新操作。
# 合并字典
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}
# 更新字典
dict1 |= dict2 # dict1 becomes {'a': 1, 'b': 3, 'c': 4}
移除 collections.OrderedDict
中的 keys()
、values()
和 items()
方法的顺序保证,提高了性能。
允许使用 list[int]
和 dict[str, int]
等简化的类型注解。
my_list: list[int] = [1, 2, 3]
my_dict: dict[str, int] = {"key": 10}
zoneinfo
模块:引入了 zoneinfo
模块,提供了时区支持,允许你使用 IANA 时区数据库来处理时区转换。
from zoneinfo import ZoneInfo
import datetime
dt = datetime.datetime(2021, 1, 1, tzinfo=ZoneInfo("Asia/Shanghai"))
移除了某些过时的库和功能,如 collections
中的 Iterable
和 MutableMapping
。
2. Python 3.10(2021年10月发布)
主要新特性:
引入了 match
和 case
语句,实现了类似于其他语言中的 switch-case 结构,但功能更强大,支持更复杂的匹配模式。
def handle_command(command):
match command:
case ["quit"]:
print("Quit command")
case ["load", filename]:
print(f"Loading {filename}")
case _:
print("Unknown command")
Python 3.10 引入了更详细和有用的错误消息,帮助开发者更容易定位问题。
parenthesized
上下文管理器:支持在 with
语句中使用多个上下文管理器时,可以用括号来分隔它们。
with (
open('file1.txt') as f1,
open('file2.txt') as f2
):
# 处理文件
TypeGuard
:typing
模块引入了 TypeGuard
,这是一个新的类型提示功能,帮助开发者表示某些函数的返回值依赖于输入参数的类型。
允许使用 isinstance
来检查类型参数。
from typing import TypeVar, Type
T = TypeVar("T", bound=Type)
def check_type(obj: object, cls: Type[T]) -> bool:
return isinstance(obj, cls)
match
与 case
语句的新语法引入:允许在表达式中使用模式匹配进行更精确的检查。
3. Python 3.11(2022年10月发布)
主要新特性
Python 3.11 引入了大量的性能改进,官方称其为“史上最快的 Python 版本”,通过优化解释器、字节码等提高了执行效率。
Python 3.11 对异常链的处理进行了改进,可以更清晰地查看多次异常抛出的堆栈信息。
try:
1 / 0
except ZeroDivisionError as e:
raise ValueError("Invalid operation") from e
增强了类型提示的严格性和语法支持,特别是在函数签名、变量和方法的注释方面。
f-string
在 3.11 中变得更高效,减少了内存消耗。
引入了新的 __frozen__
方法来优化对象实例的创建,降低内存开销。
引入了 Self
类型提示,允许方法返回类型指定为类本身。
class MyClass:
def set_value(self, value: int) -> Self:
self.value = value
return self
4. Python 3.12(2023年10月发布)
主要新特性
Python 3.12 引入了更好的模块加载机制,支持对包的软链接操作,特别是针对开发和调试有显著提升。
通过进一步优化字节码和减少代码的执行时间,使得 3.12 在执行效率方面比 3.11 还要更快。
Python 3.12 对 TypeError
异常进行了改进,使得对某些类型错误的提示更加精确,帮助开发者更容易理解错误的根本原因。
对 async
和 await
语法进行了进一步优化,使得异步编程变得更加高效。
Python 3.12 引入了更多的类型检查功能,包括对 typing
模块的新更新和功能的支持。
literal types
现在更加灵活,允许支持更广泛的类型检查。Python 3.12 对 Python 解释器和虚拟机进行了一些重构,进一步提高了性能。
总结对比:
特性 | Python 3.9 | Python 3.10 | Python 3.11 | Python 3.12 |
---|---|---|---|---|
字典合并运算符 | ✅ | |||
结构化模式匹配 | ✅ | |||
性能提升 | ✅ | ✅ | ||
类型提示改进 | ✅ | ✅ | ✅ | ✅ |
match 和 case |
✅ | |||
异常链改进 | ✅ | |||
Self 类型提示 |
✅ | ✅ | ||
zoneinfo 时区支持 |
✅ | |||
新的字节码优化 | ✅ |
作者:Ceeeeen