Python 3.13的新特性

 🎉 Python 3.13在2024/10/7 重磅发布!这些新特性你一定要知道!

 

Python 3.13 是 Python 编程语言的最新稳定版本,带来了许多令人兴奋的新功能和改进。无论你是新手还是经验丰富的开发者,这些更新都会让你的编程体验更加顺畅和高效。让我们一起来详细了解一下这些新特性吧!


 

01 更好的交互式解释器

 

Python 3.13 引入了一个全新的交互式解释器,提升了开发者的使用体验。这个新的解释器基于 PyPy 项目的代码,支持多行编辑和历史记录功能。这意味着你可以更方便地编辑和运行多行代码,而不必一次性输入所有内容。此外,新的解释器还支持 REPL 专属命令,如 `help`、`exit` 和 `quit`,不再需要以函数形式调用它们。

更棒的是,提示和回溯信息现在默认启用了彩色显示,让错误信息一目了然。你还可以通过按 F1 浏览交互式帮助,按 F2 查看去除了输出和提示符的历史记录,按 F3 进入“粘贴模式”以更方便地粘贴大段代码。这些改进使得交互式编程更加直观和高效。

 

 

02 改进的错误消息

 

在编写代码时,错误是不可避免的,但 Python 3.13 的改进让错误消息更加友好和易于理解。例如,当你的脚本名称与标准库中的某个模块重名时,Python 会提示你重命名文件以避免冲突。这可以帮助你快速定位问题并进行修复。

此外,当你向函数传入不正确的关键字参数时,错误消息会尝试提示正确的关键字参数。例如:

  •  
"Better error messages!".split(max_split=1)

会返回:

  •  
TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?

这些改进使得调试过程更加高效,减少了开发者的困扰。

 

 

03 自由线程的 CPython

 

Python 3.13 引入了对禁用全局解释器锁(GIL)的实验性支持,这被称为自由线程模式。这一特性允许 Python 在多核处理器上更好地并行运行线程,从而提高多线程程序的性能。

自由线程模式需要一个不同的可执行程序,通常名为 `python3.13t` 或 `python3.13t.exe`。虽然这一特性目前是实验性的,但它为未来的性能提升提供了可能性。你可以通过环境变量 `PYTHON_GIL` 或命令行选项 `-X gil=1` 来控制是否启用 GIL。

 

 

04 实验性的即时编译器

 

Python 3.13 还引入了一个基本的即时编译器(JIT),可以加快某些 Python 程序的运行速度。虽然目前默认是禁用的,但未来版本将进一步优化这一特性。

要启用 JIT 编译器,你可以使用 `–enable-experimental-jit` 选项进行配置和构建。JIT 编译器通过将特化的字节码翻译为中间表示形式(IR)并最终翻译为机器码来提高性能。这一过程使用了名为“拷贝并打补丁”的技巧,没有运行时依赖,但增加了构建时对 LLVM 的依赖。

 

 

05 针对 `locals()` 的已定义修改语义

 

在历史上,改变 `locals()` 的返回值的预期结果是留给具体的 Python 实现来定义的。从 Python 3.13 开始,CPython 对于大多数代码执行作用域的历史行为进行了标准化,但也将已优化作用域(函数、生成器、协程、推导式和生成器表达式)修改为显式地返回当前已赋值的局部变量的独立快照,包括局部引用的在闭包中捕获的非局部变量。

这意味着在已优化作用域中调用 `locals()` 将始终返回局部变量的独立快照,而不是共享的字典实例。这一改进确保了调试器和类似工具能可靠地更新局部变量。

 

 

06 对移动平台的支持

 

Python 3.13 现在官方支持 iOS 和 Android 平台。iOS 支持包括 arm64-apple-ios 和 arm64-apple-ios-simulator 等目标,Android 支持包括 aarch64-linux-android 和 x86_64-linux-android 等目标。这一改进使得移动开发者可以更方便地在这些平台上使用 Python。

 

 

07 标准库的重大改进

 

Python 3.13 对标准库进行了多项改进,移除了一些老旧的模块,添加了一些新功能。例如:

– 新增了 `PythonFinalizationError` 异常,当操作在最终化期间被阻塞时将被引发。

– `argparse` 模块现在支持弃用命令行选项、位置参数和子命令。

– 新增的函数 `base64.z85encode()` 和 `base64.z85decode()` 支持对 Z85 数据进行编码和解码。

– `copy` 模块新增了 `copy.replace()` 函数,支持许多内置类型和任何定义了 `__replace__()` 方法的类。

– 新的 `dbm.sqlite3` 模块现在是默认的 dbm 后端。

– `os` 模块增加了一套新函数用于处理 Linux 的定时器通知文件描述符。

– `random` 模块现在提供了一个命令行界面。

这些改进使得标准库更加现代化和易用。

 

 

08 安全改进

 

Python 3.13 在安全性方面也有显著提升。例如,`ssl.create_default_context()` 现在设置了 `ssl.VERIFY_X509_PARTIAL_CHAIN` 和 `ssl.VERIFY_X509_STRICT` 作为默认的旗标。这些改进增强了网络通信的安全性。

 

 

09 C API 的改进

 

Python 3.13 对 C API 也进行了多项改进。例如:

– 现在 `Py_mod_gil` 槽位被用来指明一个扩展模块支持在禁用 GIL 的情况下运行。

– 增加了 `PyTime` C API,提供了对系统时钟的访问。

– `PyMutex` 是新增的轻量级互斥锁,只占用一个字节。

– 新增了一套函数用于在 C API 中生成监控事件。

这些改进使得 C 扩展模块的开发更加灵活和高效。

 

 

10 新的类型标注特性

 

Python 3.13 在类型标注方面也有一些重要更新:

– 类型形参(`typing.TypeVar`、`typing.ParamSpec` 和 `typing.TypeVarTuple`)现在可支持默认值。

– 新的 `warnings.deprecated()` 装饰器在类型系统和运行时中增加了对标记为弃用的支持。

– `typing.ReadOnly` 可被用来将 `typing.TypedDict` 的项标记为对类型检查器只读。

– `typing.TypeIs` 提供了更直观的类型细化行为,作为对 `typing.TypeGuard` 的替代。

这些改进使得类型检查更加严格和灵活。

 

 

11 重要的移除

 

Python 3.13 移除了许多老旧的模块和功能,例如:

– 移除了 19 个“死电池”模块,包括 `aifc`、`audioop`、`cgi`、`cgitb`、`chunk`、`crypt`、`imghdr`、`mailcap`、`msilib`、`nis`、`nntplib`、`ossaudiodev`、`pipes`、`sndhdr`、`spwd`、`sunau`、`telnetlib`、`uu` 和 `xdrlib`。

– 移除了 `2to3` 工具和 `lib2to3` 模块。

– 移除了 `tkinter.tix` 模块。

– 移除了 `locale.resetlocale()` 函数。

– 移除了 `typing.io` 和 `typing.re` 命名空间。

– 移除了链式的 `classmethod` 描述器。

这些移除使得 Python 标准库更加简洁和现代。

 

 

12 发布计划的变化

 

Python 3.13 及以后的版本将有两年的完整支持,另加三年的安全修正。这一政策更新使得开发者有更多时间来适应新版本,同时确保旧版本的安全性。

Python 3.13 的发布不仅提升了开发体验,还为未来的性能优化和多线程支持打下了坚实的基础。无论你是新手还是经验丰富的开发者,这些新特性都会让你的编程之旅更加顺畅和高效。赶快升级,体验这些新特性吧!🐍💻

更多