数据STUDIO

Python 3.13 的这些更新亮了!

Image

Image
Python 3.13 包含大量令人惊叹的更新和功能。Python 不断让我爱上它,我相信你也会。
Image

Python 3.13 正式发布[1]。

Image

我们注意到 GIL 成为可选项,是 Python3.13 向前迈出的重要一步,为未来的一些改进奠定了基础,尤其是在语言性能方面。

以下是 Python 3.13 的主要更新。

1. 改进的 REPL

REPL[2]是读取-评估-打印循环(read-evaluate-print loop)的缩写,它一直是 Python 开发人员快速运行代码的首选工具。REPL 在市场上已经存在了相当长的时间,就像你一样,我也曾在使用它时遇到过麻烦。

Image

遗憾的是,Python REPL 解释器不支持传统的 Pythonic方法。例如

  1. REPL 中的多行编辑
  2. 粘贴多行代码

Python 3.13 在使用 REPL 时进行了大量更新,从而简化了使用。例如

按下 ↑ 和 ↓ 箭头将调用整个代码块

以前,当我们在 REPL 中编写多行代码块时,如果希望重新运行同一个代码块,我们必须多次按向上 ↑ 箭头来重新创建代码块。

多亏了 Python 3.13,按向上或向下箭头可以重现整个代码块,如下图所示--按向上或向下箭头可以重现整个代码块。

Image

调用和编辑多行语句的功能大大节省了时间,在使用 REPL 时效率更高。

exit 代替 exit()

通过此次更新,退出 Python REPL 比以往任何时候都更好。现在,exit 或 quit将像 Python 语言中的其他函数一样运行。现在,不需要指定圆括号--“......”。

Image

在 REPL 中粘贴多行代码

在早期版本中,我不记得上一次将代码块复制到 Python REPL 中进行调试是什么时候了。我总是创建一个新的 .py 文件,然后使用 python my-file.py 命令运行它。

那么,好消息来了!

现在,我们可以传递任何多行代码块--编辑它--并在 Python REPL 中运行它。

Image

改进 REPL 中的错误信息

Python REPL[3] 的下一个重大更新是更好的错误信息。Python REPL 在显示错误方面从来都不出色。Python 3.13 延续了这一优良传统,以增强开发体验。

在此版本中,当遇到运行时错误时,回溯信息将添加颜色。

mg

不过,如果你不喜欢这些颜色,可以将 PYTHON_COLORS 环境变量设置为 0- 关闭它们。

Image

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]。

Image

自由线程 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

[4]

全局解释器锁(GIL): https://wiki.python.org/moin/GlobalInterpreterLock

[5]

GIL: https://wiki.python.org/moin/GlobalInterpreterLock

[6]

自由线程 Python: https://docs.python.org/3.13/howto/free-threading-extensions.html

[7]

Python3.13 Installer: https://www.python.org/downloads/release/python-3130rc3/

🏴‍☠️宝藏级🏴‍☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫 等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递ImageImage