Python 3.13 的改进
Python 3.13 是一个充满新功能和改进的优秀版本,已经有大量文章详细介绍了发布说明。因此,本文不会讨论那些已经耳熟能详的内容,只就几个不鲜为人知的改进给予介绍。
让调试变得更好
尽管 PDB 的操作界面简陋,但它毕竟简单。之前,在 PDB 中会遇到这样的问题:
try:
1 / 0
except ZeroDivisionError as e:
breakpoint()
那么,当读取e
时会发生什么:
-> breakpoint()
(Pdb) e
*** NameError: name 'e' is not defined
现在,这个问题已被修复。
但这不是全部。PDB 本身也得到了改进:
- 支持多行编辑。
- 代码补全功能,如同在新的 REPL 中一样。
break
命令接受断点路径,因此可以方便地在任意库中动态地添加断点。- 在 zipapps 中支持PDB。
- 修复了 PDB 命令行界面吞噬参数的问题。VSCode 的团队会喜欢这一点。
- .pdbrc 文件不再损坏。
- 在执行
exec()
后,即使是 SyntaxError,调试模式也能正常工作。
这就是使用 Python 3.13 的一个很好的理由。
文件系统操作得到了改进
一个有 30 年历史的编程语言已经能完美处理路径和文件操作了,但事实证明总有改进的空间。
提供高级文件系统操作(如递归删除或复制)的 shutil 模块进行了许多调整:修复了大量错误(特别是在递归过程中的错误处理),并增加了选项(例如:选择如何处理符号链接)。
同样适用于 zipfile.Path,这是一个与 pathlib 兼容的遍历 zip 文件的包装器,自 3.8 起就存在。在 3.13 对其进行了许多根本改进,特别是改善了如何处理目录,从前需要大量的手动操作。
最后,pathlib 本身也进行了许多细微的性能优化,现在许多操作在后台使用字符串而不是 Path 对象。序列化也应该更快。
不仅仅是速度提升,还有 API 的漂亮调整。例如:Path.glob() 和 rglob() 现在接受路径类对象作为模式,如果以 **
结束模式,Path.glob() 将返回文件和目录,并新增了 Path.from_uri() 方法。
并发处理上的小进步
asyncio.as_completed() 现在返回一个既是异步迭代器又是普通迭代器的对象。虽然不算大改进,但很不错。
asyncio.TaskGroup 非常棒,如果还没用它,建议尝试一下。现在,当在一个未激活的任务组上调用create_task() 时,它将关闭协程,防止出现 RuntimeWarning。
queue.Queue 现在可以通过 shutdown() 方法显式关闭,这有助于告知系统停止向其提交任务。
多线程池的最大工作线程数已增加到 62 以上。
性能改建还很难
性能改进在这个版本中并没有达到预期,就像 3.12 版本一样,在传统的异步操作基准测试中只略有提高。让 Python 更快比 Guido 想象的要难得多。
除此之外,还有很多可改进的空间,此处不一一列举,继续期待再升级。
一些小惊喜
Python 3.13 的一些小改进,或许会给某些应用者带来惊喜:
python -m venv
现在会添加一个.gitignore
文件,自动忽略 venv 目录。json.dumps()
在使用缩进时现在使用 C JSON 编码器,使其速度更快。著名的尾随逗号(trailing coma,详见在线图书《Python与AI同行:从小白到专家》第12章的12.2用Python读写JSON数据)导致的解析错误现在更清晰。- 可以向枚举中添加私有成员。
atexit()
在多线程方面表现更好。- 数据类现在每个数据类调用一次
exec()
,而不是每添加一个方法调用一次。这可以将数据类创建速度提高多达20%。 - 添加了融合乘加操作,通过
math.fma(x, y, z)
实现。 time.sleep()
进行了改进,参数可以是浮点数。- re 模块函数如
re.findall()
,re.split()
,re.search()
和re.sub()
在执行短时间重复匹配时现在可以被用户中断。减少了阻止 Ctrl + C 工作机会。 str.replace()
的count
参数现在可以作为关键字参数使用。
其他的优化,如果有兴趣的读者,可以去查阅 Python 3.13 的文档。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Python 3.13 的改进
发表评论 取消回复