# XXX
# XXX TALK ABOUT PEP 702
# XXX https://peps.python.org/pep-0702
# XXX
from deprecated import deprecated
@deprecated("Adding ain't cool no more", version="1.0.0")
def add(x: int, y: int) -> int:
return x + y
@deprecated("减法已经过时了", version="1.0.0")
def sub(x: int, y: int) -> int:
return x - y
if __name__ == "__main__":
print(add(5, 7))
print(sub(7, 5))
代码解析及 PEP 702 简介
代码解析:
from deprecated import deprecated
@deprecated("Adding ain't cool no more", version="1.0.0")
def add(x: int, y: int) -> int:
return x + y
if __name__ == "__main__":
print(add(5, 7))
-
导入:
from deprecated import deprecated
: 导入deprecated
库中的deprecated
装饰器。该装饰器用于标记函数或方法已过时。
-
过时函数:
-
@deprecated("Adding ain't cool no more", version="1.0.0")
: 使用deprecated
装饰器装饰add
函数。该装饰器接受两个参数:- 信息 (字符串): 函数被调用时显示的警告信息。此处为 “加法过时了”。
- 版本 (可选字符串): 指定函数过时的版本。此处为 “1.0.0”。
-
def add(x: int, y: int) -> int
: 定义名为add
的函数,接受两个整型参数 (x
和y
) 并返回它们的和 (整型)。 -
return x + y
: 计算x
和y
的和并返回结果。
-
-
条件执行:
-
if __name__ == "__main__":
: 确保代码仅在脚本直接运行时执行 (而非作为模块导入时)。 -
print(add(5, 7))
: 调用add
函数并传入参数 5 和 7,并将结果 (12) 打印到控制台。
-
PEP 702 简介:
- 过时警告: 运行代码时,您可能会看到类似以下的警告信息:
DeprecationWarning: Call to deprecated function (or staticmethod) add. (Adding ain’t cool no more) – Deprecated since version 1.0.0.
- PEP 702 (可选): PEP 702 提出了一种将过时警告纳入类型系统的方案,但尚未在标准库中实现。在 PEP 702 或类似机制可用之前,可以使用
deprecated
等第三方库来管理过时问题。
要点:
deprecated
装饰器用于警告开发人员函数或方法不再推荐使用。- 警告信息提供有关过时的上下文,包括原因和过时版本。
- 此做法鼓励开发人员迁移到替代方案,并帮助维护代码清晰度。
总结:
这段代码展示了如何使用 deprecated
装饰器标记函数为过时,并在调用时发出警告信息。虽然 PEP 702 为基于类型的过时警告提供了一种潜在的未来方向,但目前的方法依赖于 deprecated
等库。
运行上面代码输出:
/tmp/1/4.py:19: DeprecationWarning: Call to deprecated function (or staticmethod) add. (Adding ain't cool no more) -- Deprecated since version 1.0.0.
print(add(5, 7))
12
/tmp/1/4.py:20: DeprecationWarning: Call to deprecated function (or staticmethod) sub. (减法已经过时了) -- Deprecated since version 1.0.0.
print(sub(7, 5))
2