Python 3.13 有哪些新功能?
Python 3.13 的最新稳定版本带来了许多重要的更新,包括语言本身、实现和标准库的改进。本文将详细介绍这些更新,以便开发人员能够充分利用这些新特性。
一. 改进的交互式解释器
交互式解释器通常称为 REPL(读-评-打印循环),它接收输入,评估结果并输出,然后循环重复这个过程。
Python 现在引入了一个新的默认交互式 shell,基于 PyPy 项目进行了适配,提供了多个改进,使 REPL 的使用更加顺畅。
-
多行编辑与历史记录:用户现在可以享受多行编辑功能,且历史记录会得到保留。 -
常见命令的支持:可以直接使用帮助(help)、退出(exit)和退出(quit)等常用命令,而无需将它们作为函数调用。 -
彩色提示和 traceback:默认情况下,提示和 traceback 被彩色化,提升了可读性。 -
帮助浏览:用户可以使用 F1 键快速浏览帮助信息,F2 键可访问独立的命令历史记录,并在跳过输出和提示的情况下进行导航。 -
粘贴模式:引入了 "粘贴模式"(F3),便于轻松粘贴较大代码块,再次按 F3 可以切换回常规模式。 -
旧版 shell:如果用户更喜欢旧版 shell,可以通过设置 PYTHON_BASIC_REPL
环境变量来恢复。
二. 改进的错误信息
在 Python 3.13 中,终端显示的 traceback 默认带有颜色,这在运行时发生错误时增强了可读性。这一行为可以通过新的 PYTHON_COLORS
环境变量进行自定义,同时支持标准的 NO_COLOR
和 FORCE_COLOR
选项。此外,错误信息得到了改进,不仅突出问题,还提供修复建议。
三. 自由线程 CPython
自由线程执行模式使得线程可以在 CPU 核心之间并行运行,从而优化可用的处理能力。尽管并非所有软件都会自动利用此功能,但考虑到线程设计的程序在多核系统上可能会表现得更好。需要注意的是,自由线程模式仍然是实验性的,可能会导致一些错误,并显著降低单线程性能。使用环境变量 PYTHON_GIL
或命令行选项 -X gil=1
,可以在运行时选择性地启用 GIL(全局解释器锁)的自由线程 CPython 构建。
要确定当前解释器是否支持自由线程,可以运行以下命令:
python -VV
并检查输出是否包含“实验性自由线程构建”。此外,可以使用以下函数检查在运行进程中 GIL 是否被禁用:
import sys # 导入 sys 模块
# 检查 GIL 是否启用
is_gil_enabled = sys._is_gil_enabled() # 返回 GIL 是否启用
print("GIL 是否启用:", is_gil_enabled) # 输出 GIL 状态
四. 实验性的 JIT(即时编译)编译器
即时编译(JIT)编译器通过允许解释器在程序运行时编译某些代码来增强其速度。在 Python 3.13 中,引入了新的实验性 JIT 编译器。这意味着它被包含在 Python 的源代码中,但默认未启用。
要使用 JIT 编译器,需要配置特定版本的 Python 3.13,并启用 JIT,过程与使用自由线程 Python 类似,但具有不同的构建标志。当 CPython 使用以下命令配置和构建时:
--enable-experimental-jit
将添加 JIT 编译器,可能会加速某些 Python 程序。JIT 编译在同一操作重复执行的场景中显著提升性能,使 JIT 编译器有足够的时间分析和优化代码。
五. 标准库的改进
标准库的新增功能包括:
-
新增异常:添加 PythonFinalizationError
异常,当操作在最终化过程中被阻塞时引发。 -
argparse 模块:该模块现在支持弃用命令行选项、位置参数和子命令。 -
base64 支持:新增 base64.z85encode()
和base64.z85decode()
函数,用于支持 Z85 数据的编码和解码。 -
copy 模块:现在有一个 copy.replace()
函数,支持许多内置类型和任何定义了__replace__()
方法的类。 -
dbm.sqlite3 模块:现在是默认的 dbm 后端。 -
os 模块:新增一系列用于处理 Linux 的计时器通知文件描述符的函数。 -
random 模块:现在具有命令行界面。
六. 包的移除
弃用模块是 Python 标准库中不建议在新项目中使用的功能,尽管它们在旧版本的 Python 中仍然可以运行。这些功能被认为是过时、不安全或不再积极维护。
以下剩余的 19 个“死电池”(遗留标准库模块)已从标准库中移除:
-
aifc -
audioop -
cgi -
cgitb -
chunk -
crypt -
imghdr -
mailcap -
msilib -
nis -
nntplib -
ossaudiodev -
pipes -
sndhdr -
spwd -
sunau -
telnetlib -
uu -
xdrlib
此外,以下工具和模块也被移除:
-
移除 2to3
工具和lib2to3
模块(在 Python 3.11 中弃用)。 -
移除 tkinter.tix
模块(在 Python 3.6 中弃用)。 -
移除 locale.resetlocale()
函数。 -
移除 typing.io
和typing.re
命名空间。 -
移除链式 classmethod
描述符。
七. 结论
Python 3.13 引入的改进和新特性将显著增强开发人员的使用体验,提供更高效的性能和更友好的用户体验。通过充分利用这些新功能,开发人员可以创建更具交互性和高效的应用程序,进一步推动 Python 生态系统的发展。