python 3.12 中的新特性(一)

Python 3.12刚发布不久。官方鼓励开发人员在非生产代码中尝试这个最新版本,既可以验证它与你的程序的兼容性,也可以了解你的代码是否能从这个最新版本中的新功能集和性能改进中受益。以下是Python 3.12中最重要的新功能以及它们对开发人员的意义的简要介绍。

Python每年发布一个新版本,其中包括在上半年发布功能锁定的测试版,在年底发布最终版本。

主要内容

更好的错误消息
减少f-string的格式限制
对Linux perf性能分析器的支持
更快的调试/性能监控
缓冲协议dunders
类型提示改进
性能改进
其他变更

更好的错误信息

最近的Python版本中,错误信息在精度(准确的行位置)和详细程度(更好的关于可能出错的建议)方面获得了一定改进。

Python 3.12带来了额外的增强:

  1. 缺失模块的建议(”did you forget to import X?”)现在包括了标准库中的模块。

  2. 对于常见的导入语法错误,提供了更好的错误建议;例如,import p from m返回一个错误,询问你是否from m import p

  3. 给定模块的导入错误现在包括了从导入的模块的命名空间中的建议。例如,如果你尝试from thismodule import thisclass,而你实际上是想要导入的是ThisClass,你将会得到一个关于ThisClass的建议。

  4. 如果NameError是在类实例中发生,那么提示会建议你在变量前添加self.(例如,如果变量 ‘speed’ 没有定义,提示:“Did you mean ‘self.speed’?”)。这是因为在类实例中忽略self作为实例变量的常见错误来源。

减少f-string的格式限制

F-strings 是字符串格式化系统,过去的版本中存在很多限制。Python 3.12消除了其中许多限制,具体如下:

  1. F-string表达式现在可以是任何有效的Python表达式。
  2. F-string表达式现在可以包含与用于设置f-string本身的引号相同类型的引号。例如,f"The shopping list, {", ".join(groceries)}" 现在是一个有效的f-string。
  3. F-string表达式现在可以是多行表达式,只要它们遵循其他多行表达式的规则(例如,使用括号使表达式跨越多行)。
  4. 现在允许在f-strings中使用反斜杠()。你可以使用简单控制字符(n)。
  5. f-string表达式的错误提示会提供错误在表达式中的具体位置,而不只是告诉你在表达式自身内部。这使得f-string错误更容易追踪和排查。

对Linux perf性能分析器的支持

广泛使用的Linux性能分析工具perf可以与Python一起工作,但只提供有关Python运行时中C级别发生的情况的信息,而无法显示实际Python程序的函数信息。

Python 3.12启用了一种opt-in模式,允许perf收集有关Python程序的详细信息,而不仅仅是运行时信息。这种模式可以在环境级别或者通过sys.activate_stack_trampoline函数进入到python程序内部。

更快的调试/性能监控

使用分析器或调试器来运行Python程序可以让你看到程序的运行情况。但是,这也会带来性能开销。通过调试器或分析器运行的程序可能会比正常运行慢一个数量级。

PEP 669 提供了用于代码对象事件的钩子,分析器和调试器可以连接到这些事件,例如函数的开始或结束。一个工具可以注册回调函数,每当触发这样的事件时,回调函数就会被触发,这大大降低了性能的损失。

缓冲协议dunders

Python的缓冲区协议提供了一种访问许多Python对象(如bytes或bytearray)所包装的原始内存区域的方式。但是,大多数与缓冲区的交互发生在C扩展中。到目前为止,Python代码无法知道给定对象是否支持缓冲区协议,也无法将代码类型注释为与协议兼容。

PEP 688实现了新的对象方法,允许Python代码使用缓冲区协议。这使得在Python中编写公开其数据缓冲区的对象变得更容易,而无需使用C编写这些对象。其中,__buffer__方法可用于分配新内存或仅访问现有内存;它返回一个memoryview对象。__release_buffer__方法用于释放用于缓冲区的内存。

目前,PEP 688的方法没有一种方式来指示给定的缓冲区是否为只读的,这在处理像bytes这样的不可变对象的数据时非常有用。但如果需要,可以添加该功能。


原文始发于微信公众号(harvey的网络日志):python 3.12 中的新特性(一)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188256.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!