gpt4 book ai didi

python - 使用装饰器和直接应​​用函数有什么区别吗?

转载 作者:行者123 更新时间:2023-12-02 18:13:57 26 4
gpt4 key购买 nike

我最近成为 PyPDF2 的维护者,这是一个相当古老的库,但仍然有一些处理 2.4 之前的 Python 版本的代码。虽然我想尽快放弃对 3.5 及更早版本的支持,但我看到一些部分我不确定为什么要这样编写。

一个例子是这样的:

代码中的内容:

class Foo(object):
def a(b, c):
print(b)
print(c)

a = staticmethod(a)

我期望的是:

class Bar(object):
@staticmethod
def a(b, c):
print(b)
print(c)

有什么理由使用第一个表示法吗?它们严格等效吗?

我已经看到了decorators were introduced in Python 2.4 ,所以这可能是此类极端遗留代码的示例。

最佳答案

第一个版本只是 2.4 之前使用 staticmethod 的方式。这两个版本并不完全等效,但差异非常小,几乎不重要。

具体来说,在支持装饰器语法的 Python 版本上,唯一的区别是第二个版本将原始函数直接传递给 staticmethod,而第一个版本将原始函数存储到 a,然后查找 a 变量以找到要传递给 staticmethod 的参数。从技术上讲,这在非常奇怪的用例中可能很重要,特别是对于元类,但这种可能性极小。 Python 2 甚至不支持相关的元类功能 (__prepare__)。

关于python - 使用装饰器和直接应​​用函数有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71905698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com