Python 3.13 的这些更新亮了!
2025-03-05 11:18:51 作者: 匿名 浏览量:6次
Python 3.13 包含大量令人惊叹的更新和功能。Python 不断让我爱上它,我相信你也会。
Python 3.13 正式发布[1]。
我们注意到 GIL 成为可选项,是 Python3.13 向前迈出的重要一步,为未来的一些改进奠定了基础,尤其是在语言性能方面。
以下是 Python 3.13 的主要更新。
1. 改进的 REPL
REPL[2]是读取-评估-打印循环(read-evaluate-print loop)的缩写,它一直是 Python 开发人员快速运行代码的首选工具。REPL 在市场上已经存在了相当长的时间,就像你一样,我也曾在使用它时遇到过麻烦。
遗憾的是,Python REPL 解释器不支持传统的 Pythonic
方法。例如
REPL 中的多行编辑
粘贴多行代码
Python 3.13 在使用 REPL 时进行了大量更新,从而简化了使用。例如
按下 ↑ 和 ↓ 箭头将调用整个代码块
以前,当我们在 REPL 中编写多行代码块时,如果希望重新运行同一个代码块,我们必须多次按向上 ↑ 箭头来重新创建代码块。
多亏了 Python 3.13,按向上或向下箭头可以重现整个代码块,如下图所示--按向上或向下箭头可以重现整个代码块。
调用和编辑多行语句的功能大大节省了时间,在使用 REPL 时效率更高。
exit 代替 exit()
通过此次更新,退出 Python REPL 比以往任何时候都更好。现在,exit
或 quit
将像 Python 语言中的其他函数一样运行。现在,不需要指定圆括号--“......”。
在 REPL 中粘贴多行代码
在早期版本中,我不记得上一次将代码块复制到 Python REPL 中进行调试是什么时候了。我总是创建一个新的 .py
文件,然后使用 python my-file.py
命令运行它。
那么,好消息来了!
现在,我们可以传递任何多行代码块--编辑它--并在 Python REPL 中运行它。
改进 REPL 中的错误信息
Python REPL[3] 的下一个重大更新是更好的错误信息。Python REPL 在显示错误方面从来都不出色。Python 3.13 延续了这一优良传统,以增强开发体验。
在此版本中,当遇到运行时错误时,回溯信息将添加颜色。
不过,如果你不喜欢这些颜色,可以将 PYTHON_COLORS
环境变量设置为 0
- 关闭它们。
2. 不再有全局解释器锁 (GIL)
与其他现代编程语言一样,Python 提供了更好的方法来处理内存效率任务。Python 的主要优势之一是
Python确保代码是线程安全的
换句话说,要使代码具有线程安全性,需要确保两个不同的执行线程不会同时更新内存的相同部分。
但是,这也有一个注意事项--一个大锁,也被称为全局解释器锁(GIL)[4]。以下是 GIL 的作用
GIL 确保每次只有一个线程访问底层内存,从而使 Python 成为线程安全的。
因为这个锁是全局的,只有一个 GIL,所以大多数 Python 程序实际上都是单线程的,即使它们运行在有多个 CPU 可用的现代硬件上。
现在,GIL[5] 成为麻烦制造者的原因就在这里--随着微型 CPU 的不断进步,我们计算机中可用 CPU 的数量也与日俱增。但是,众所周知,GIL 是个硬骨头,一点也没变。
因为 GIL 是个难啃的硬骨头,我们所有的多线程 Python 程序都是单线程的。
自由线程 Python
现在,有了 Python3.13 ,你可以设置一个 自由线程 Python[6] 设置,它没有全局解释器锁。
要设置自由线程 Python,只需在安装 Python3.13 预发行版时启用 Download free-threaded binaries
。可以从这里获取 Python3.13 安装程序 - Python3.13 Installer[7]。
自由线程 Python 可执行文件通常被命名为后缀为 t
的 python3.13t
。一旦掌握了自由线程版本的 Python,就可以在每次运行 Python 时选择启用或禁用 GIL。
现在,我们可以在所有可用内核上运行多线程 Python 代码了。
3. 随机命令行
Python 3.13 为 “random”模块添加了一个命令行接口--“random”。
$ python -m random
usage: random.py [-h] [-c CHOICE [CHOICE ...] | -i N | -f N] [input ...]
positional arguments:
input if no options given, output depends on the input
string or multiple: same as --choice
integer: same as --integer
float: same as --float
options:
-h, --help show this help message and exit
-c, --choice CHOICE [CHOICE ...]
print a random choice
-i, --integer N print a random integer between 1 and N inclusive
-f, --float N print a random floating-point number between 0 and N inclusive
现在,可以通过调用 python -m random
来创建随机数或进行随机选择。
$ python -m random 10
10
$ python -m random 6.0
4.150788718838683
参考资料
[1]
Python 3.13 : https://www.python.org/downloads/release/python-3130/
[2]
REPL: https://docs.python.org/3.13/tutorial/interpreter.html
[3] Python REPL: https://docs.python.org/3/tutorial/interpreter.html 全局解释器锁(GIL): https://wiki.python.org/moin/GlobalInterpreterLock GIL: https://wiki.python.org/moin/GlobalInterpreterLock 自由线程 Python: https://docs.python.org/3.13/howto/free-threading-extensions.html Python3.13 Installer: https://www.python.org/downloads/release/python-3130rc3/