Python 3.13 有哪些新功能?

发布:2024-10-11 17:11 阅读:121 点赞:0

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_COLORFORCE_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.iotyping.re 命名空间。
  • 移除链式 classmethod 描述符。

七. 结论

Python 3.13 引入的改进和新特性将显著增强开发人员的使用体验,提供更高效的性能和更友好的用户体验。通过充分利用这些新功能,开发人员可以创建更具交互性和高效的应用程序,进一步推动 Python 生态系统的发展。