经过一年半的发展
其中新增的
-
Поддержка 复杂表达式中的赋值操作。 使用新的“:=”运算符,可以在其他表达式内执行赋值操作,例如,避免条件语句中和定义循环时的双重函数调用:如果 (n := len(a)) > 10:
...while (块:= f.read(256)) != ":
... -
Поддержка 用于指定函数参数的新语法。 在函数定义期间枚举参数时,现在可以指定“/”来将只能根据函数调用期间枚举值的顺序赋值的参数与可赋值的参数分隔开以任何顺序(变量=值语法))。 在实用方面,新功能允许 Python 中的函数完全模拟 C 中现有函数的行为,并且还可以避免绑定到特定名称,例如,如果计划将来更改参数名称。“/”标志补充了先前添加的“*”标志,分隔仅适用“变量=值”形式的赋值的变量。 例如,在函数“def f(a, b, /, c, d, *, e, f):”中,变量“a”和“b”只能按照值列出的顺序进行赋值,
变量“e”和“f”只能通过赋值“variable=value”,变量“c”和“d”可以通过以下任意一种方式:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, s=30, d=40, e=50, f=60) -
额外 新的C API
配置Python初始化参数,允许完全控制所有配置 并提供先进的错误处理设施。 提议的 API 可以轻松地将 Python 解释器功能嵌入到其他 C 应用程序中; -
实施的 新的 Vectorcall 协议可以更快地访问用 C 语言编写的对象。 在CPython 3.8中,对Vectorcall的访问仍然仅限于内部使用;在CPython 3.9中计划转移到可公开访问的API类别; -
添加 调用运行时审核挂钩,它为 Python 中的应用程序和框架提供了访问有关脚本进度的低级信息的权限,以审核所执行的操作(例如,您可以跟踪模块的导入、打开文件、使用跟踪、访问网络套接字,通过 exec、eval 和 run_mod 运行代码); - 在模块中
泡菜 提供 支持 Pickle 5 协议,用于序列化和反序列化对象。 Pickle 允许您通过减少内存复制操作的数量并应用其他优化技术(例如使用特定于数据的压缩算法)来优化多核和多节点配置中的 Python 进程之间的大量数据传输。 该协议的第五版本值得注意的是添加了带外传输模式,其中数据可以与主pickle流分开传输。 - 默认情况下,Pickle 协议的第四个版本被激活,与之前默认提供的第三个版本相比,它可以实现更高的性能并减少传输数据的大小;
- 在模块中
键入 引入了几个新功能: - 添加了为带有字节码的已编译文件分配缓存的功能,这些文件保存在单独的 FS 树中,并与代码所在的目录分开。 通过变量设置保存字节码文件的路径
PythonPyCache前缀 或选项“-X pycache_prefix”; -
实施的 能够创建使用与版本相同的 ABI 的 Python 调试版本,这允许您在调试版本中加载用 SI 语言编写、为稳定版本编译的扩展; - f 字符串(以“f”为前缀的格式化文字)提供对 = 运算符的支持(例如“f'{expr=}'”),它允许您将表达式转换为文本以便于调试。 例如:
››› 用户 = 'eric_idle'
››› member_since = 日期(1975, 7, 31)
››› f'{user=} {member_since=}'
“用户='eric_idle'member_since=datetime.date(1975年7月31日)” - 表达 ”
继续 » 允许在块内使用最后 ; - 添加了新模块
多处理.共享内存 ,允许在多进程配置中使用共享内存段; - 在 Windows 平台上,asyncio 实现已移至使用该类
前摄器事件循环 ; - 由于使用了新的目标代码缓存机制,LOAD_GLOBAL 指令的性能提高了大约 40%。
来源: opennet.ru