在本文中,我们将探讨Python 3.13中的新特性和改进,这对开发人员来说是一次令人兴奋的升级。让我们仔细看看这些关键的变化。
Python 3.13 中的关键增强功能(8 月更新)
- 新的交互式解释器 (REPL)
- 即时 (JIT) 编译
- Python 处于自由线程模式或无 GIL 模式
- Python 3.13 的其他更新
1. 新的交互式解释器(REPL)
REPL (读取-求值-打印循环)是一种交互式编程环境,可读取用户输入、对其进行求值并打印结果。它特别适合测试代码片段、调试和学习 Python,因为它可提供即时反馈。REPL 是 Python 的一项重要功能,使其成为快速实验和迭代开发的理想语言。
自动缩进
在Python 3.12 REPL中,自动缩进不可用。要创建块和缩进,我们需要按 Tab 键。
但在Python 3.13 REPL中,当我们需要创建代码块时,在第一行缩进之后,下一行将自动缩进。不仅如此,按 Tab 键一次可以添加 4 个空格。所以我们不再需要按4 次空格键(空格空格空格空格)来添加缩进。
块级代码历史记录
在Python 3.12 REPL中,当我们想要访问以前编写的代码时,我们按下上方的键,然后逐行获取代码,因为它逐行存储代码,这在编辑块级代码时非常令人沮丧。我们总是需要多次按下上方的键,编辑代码,然后再次多次按下上方的键。
但是Python 3.13 REPL以代码块的方式存储代码,因此按下一个上键就可以获得整个块,我们将能够轻松修改和更改代码块。
exit 而不是 exit()
在 Python 3.12 REPL 版本中,输入exit、help 和 quit会引发错误。我们总是需要使用 () 运算符来调用exit、help或quit方法。这是一种愚蠢的做法。
但在 Python 3.13 REPL 中,输入help会使 REPL 进入帮助模式,输入exit会立即退出 REPL。这是新 REPL 的一个很酷的功能。
轻松粘贴代码
在 Python 3.12 版 REPL 中,粘贴代码无法按预期工作。我们收到类似这样的错误。这是因为在每一行之后,REPL 认为我们按了两次回车键,因此它会执行该行并给出错误。
但新的 REPL 将有一个很大的改进,允许我们简单地粘贴复制的代码。这使得使用从GeeksForGeeks等合法来源复制的代码变得更加容易。
REPL的其他功能:
- 语法高亮:新的 REPL 包含语法高亮,通过清晰区分关键字、变量和其他元素来提高代码的可读性。这一改进有助于开发人员快速理解和调试代码。
- 彩色提示和错误消息:通过彩色提示和错误消息,REPL 提供了更好的可视性,更容易识别代码问题。此功能对于改进错误处理和调试过程特别有用。
- 多行输入支持:开发人员现在可以直接在 REPL 中输入多行代码片段,无需外部编辑器即可完成更复杂的编码任务。此更新简化了开发工作流程并提高了编码效率。
- 改进的自动完成和帮助模式:增强的自动完成功能提供了更准确的代码建议,而新的帮助和历史模式允许用户轻松访问文档并重新访问以前的命令。
这就是有关新REPL 的全部内容。现在让我们看看Python 3.13 上发布的其他更新。
2. 即时(JIT)编译
Python 3.13 中另一个主要的性能增强是引入了即时 (JIT) 编译器。JIT 编译是一种在运行时将 Python 代码的部分内容转换为机器代码的技术,可以加快某些程序的执行速度。
这对于频繁执行的性能关键代码部分尤其有益。虽然 Python 传统上以其简单易用而非原始性能而闻名,但 Python 3.13 中 JIT 编译器的加入是使该语言与其他高性能语言更具竞争力的一步。
要使用 JIT,CPython 必须使用该--enable-experimental-jit选项构建。此 JIT 编译器将专门的第 1 层字节码转换为中间表示 (IR),称为第 2 层 IR,后者可以进一步优化并转换为机器代码以供执行。
JIT 有多种配置选项:
- no:禁用 Tier 2 和 JIT 管道。
- yes:启用 JIT,并可选择在运行时禁用它。
- yes-off:构建 JIT 但默认禁用它。
- interpreter:启用 Tier 2 解释器,同时禁用 JIT。
3. Python 处于自由线程模式或无 GIL 模式
最显著的变化之一是引入了自由线程 CPython,它允许 Python 解释器在没有全局解释器锁 (GIL) 的情况下运行。这是一个备受期待的功能,因为 GIL 长期以来一直是 Python 充分利用多核处理器能力的限制因素。
Python 3.13 引入了对GIL 禁用的自由线程模式的实验性支持。由于其实验性质,此模式默认不启用,但可以使用不同的可执行文件(或)或通过使用选项从源代码构建 Python 来激活它。python3.13tpython3.13t.exe--disable-gil
要点:
- 实验功能:自由线程模式仍处于实验阶段,这意味着它对于生产使用来说还不够稳定,并且用户应该预料到在单线程环境中会出现一些错误和性能开销。
- 并行执行:此模式可实现真正的并行,允许多个线程同时执行 Python 字节码,从而可能加快旨在利用多线程的程序的速度。
- 性能权衡:虽然自由线程执行可以提高多线程应用程序的性能,但它可能会导致单线程程序的性能下降。这是因为没有 GIL 需要更复杂的内存管理机制。
Python 3.13 的其他更新
- 文档字符串空格剥离:编译器现在从文档字符串的每一行中删除常见的前导空格,从而将字节码缓存大小减少约 5%(例如,在 SQLAlchemy 中)。
- 注释范围:类范围内的注释现在可以包含 lambda 和理解,它们不再内联到其父范围中。
- 未来语句:来自模块的相对导入future不再触发未来语句。
- 块中的全局声明:当在块中使用全局时,现在允许在块中进行声明,从而修复了之前的 SyntaxError。exceptglobalexceptelse
- 冻结模块控制:新的环境变量控制是否忽略冻结模块,类似于选项。PYTHON_FROZEN_MODULES-X frozen_modules
- 性能分析:通过和添加了对没有框架指针的分析器的支持。perfPYTHON_PERF_JIT_SUPPORT-X perf_jit
- 历史文件位置:可以通过环境变量修改文件的位置。.python_historyPYTHON_HISTORY
- 类中的静态属性:类现在具有通过分配的属性列表属性名称。static_attributesself.
- 类行号:类现在包含一个属性,指示类定义的第一行号。firstlineno
- exec()和增强功能:这些内置函数现在接受和作为关键字参数。eval()globalslocals
结论
Python 3.13 有望成为 Python 语言发展史上的一个重要里程碑,它提供了多种功能,可提高性能和可用性。从改进的 REPL 到实验性的 JIT 编译器和自由线程模式,此版本引入了强大的工具,可满足开发人员对速度、效率和现代编程实践的需求。虽然其中许多功能仍处于实验阶段,但它们让我们得以一窥 Python 的未来发展方向,使其成为一种更加通用和具有竞争力的语言。
有关 Python 3.13 的更多信息以及访问最新文档,请访问Python 官方网站。