Python 3.14 预发布版已经发布。这是 Python 社区计划的 7 个版本中的第 3 个 alpha 版本。Python 已经进入市场很长一段时间了,作为一名 Python 开发人员,我很高兴地告诉大家 Python 每次发布新版本时都会进行重大更新。
就在几个月前,随着 Python 3.13 的发布,我们看到了可选 GIL 变化的重大更新,而Python 的最新发布版本3.14有一些重大改进,我将在此列出这些更新。我在下面列出了与此新版本 Python 一起发布的前 5 个新更新。
os.environ 和 os.environb 保存着 Python 程序启动时定义的缓存环境变量。当一些环境变量在 Python 脚本之外更新时,挑战就出现了。我们都知道 Python 开发人员喜欢挑战。Python 社区一直在努力解决这个问题,现在他们带来了好消息。Python 3.14 中 os 模块的最新更新之一,就是通过新添加的 Python 内置函数 os.reload_environ() 来用最新值更新 os.environ。它的工作原理如下:
Python 3.14.0a3 (tags/v3.14.0a3:401bfc6, Dec 17 2024, 10:58:10) [MSC v.1942 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.
>>> import os>>> os.environ = os.reload_environ()>>>
现在,作为开发人员,可以使用reload_environ()方法用最新值更新 os.environ。
注意:reload_environ()函数不是线程安全的。在另一个线程中修改环境时调用它是未定义的行为。
在讨论这个功能之前,我们先来回答一个非常重要的问题——什么是注释?Python 中的注释 是代码的一部分,提供元数据并启用类型提示。注释提供有关变量、函数参数和返回值的信息。注释可帮助程序员添加有关哪个变量可能需要哪种类型的值的元数据。例如 -
>>> defaddition(num1: int, num2: float) -> float:... return num1 + num2
上面addition() 使用注释定义了参数和返回类型。
以前,Python 会急切地评估注释。现在情况已经改变了。
从 Python 3.14 版本开始 — — 注释存储在专用注释函数中,仅在需要时进行评估。
这有什么帮助?
此更改旨在使 Python 中的注释在大多数情况下更高性能和更易用。
新annotationlib模块提供了检查延迟注释的工具。
注释可以采用以下三种格式进行评估——
VALUE— 将注释评估为运行时值,类似于早期 Python 版本中的行为
FORWARDREF— 此格式用特殊标记替换未定义的名称
STRING— 这将以字符串形式返回注释
此示例展示了这些格式的行为方式 -
>>> from annotationlib import get_annotations, Format>>> deffunc(arg: Undefined):... pass...>>> get_annotations(func, format=Format.VALUE)Traceback (most recent call last): File "<python-input-10>", line 1, in <module> get_annotations(func, format=Format.VALUE) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\varun\AppData\Local\Programs\Python\Python314\Lib\annotationlib.py", line 707, in get_annotations ann = _get_dunder_annotations(obj) File "C:\Users\varun\AppData\Local\Programs\Python\Python314\Lib\annotationlib.py", line 847, in _get_dunder_annotations ann = getattr(obj, "__annotations__", None) File "<python-input-9>", line 1, in __annotate__ deffunc(arg: Undefined): ^^^^^^^^^NameError: name 'Undefined'isnot defined
>>> get_annotations(func, format=Format.FORWARDREF){'arg': ForwardRef('Undefined')}
>>> get_annotations(func, format=Format.STRING){'arg': 'Undefined'}
3. map() 方法中的数组长度检查
在 Python 中,map()函数的作用类似于循环。它以函数和可迭代对象(如列表或元组)作为输入。对于可迭代对象中的每个项目,map()将给定的函数应用于它。这将创建一个包含每个函数调用结果的新可迭代对象。本质上,map()这是一种将相同操作应用于集合中每个元素的便捷方法。之前,你可以这样编写 map() 函数:
>>> defmul(a, b):... return a * b...>>> l1 = [1, 2, 3, 4]>>> l2 = [5, 6, 7]>>> result=list(map(mul,l1,l2))
[5, 12, 21]
这里,l2包含 3 个项目,而 包含 4 个项目l1。在 Python 3.14 中strict=True 使用该函数时,可以使用标志更好地处理此问题-map()
>>> def mul(a, b):... return a * b...>>> l1 = [1, 2, 3, 4]>>> l2 = [5, 6, 7]>>> result=list(map(mul,l1,l2, strict=True))
Traceback (most recent call last): File "<python-input-33>", line 1, in <module> result=list(map(mul,l1,l2, strict=True))ValueError: map() argument 2 is shorter than argument 1
4. 解包值——改进错误消息
对于 Python 开发人员来说,当编写代码并遇到错误时,错误消息可以帮助找出代码中的错误。
与使用以前的 Python 版本相比,改进的错误消息使您的生活变得更加轻松。
例如,考虑以下代码,其中解包失败 -
>>>item1, item2, item3 = 1, 2, 3, 4
Traceback (most recent call last): File "<python-input-0>", line 1, in <module> item1, item2, item3 = 1, 2, 3, 4 ^^^^^^^^^^^^^^^^^^^ValueError: too many values to unpack (expected 3, got 4)
现在,你将收到更具描述性的错误消息 -ValueError: too many values to unpack (expected 3, got 4)
Python 3.14 带来了两种新的运算符方法:
operator.is_none()
operator.is_not_none()
operator.is_none(obj)等价于obj is None且operator.is_not_none(obj)等价于obj is not None。
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!