gpt4 book ai didi

python - 使用带或不带括号的 python 装饰器

转载 作者:IT老高 更新时间:2023-10-28 20:38:17 33 4
gpt4 key购买 nike

在 Python 中,使用相同的装饰器带括号和不带括号有什么区别?

例如:

不带括号:

@some_decorator
def some_method():
pass

带括号:

@some_decorator()
def some_method():
pass

最佳答案

第一个代码片段中的

some_decorator 是常规装饰器:

@some_decorator
def some_method():
pass

等价于

some_method = some_decorator(some_method)

另一方面,第二个代码片段中的 some_decorator 是一个返回装饰器的可调用对象:

@some_decorator()
def some_method():
pass

等价于

some_method = some_decorator()(some_method)

正如 Duncan 在评论中指出的那样,一些装饰器被设计为双向工作。这是此类装饰器的一个非常基本的实现:

def some_decorator(arg=None):
def decorator(func):
def wrapper(*a, **ka):
return func(*a, **ka)
return wrapper

if callable(arg):
return decorator(arg) # return 'wrapper'
else:
return decorator # ... or 'decorator'

pytest.fixture是一个更复杂的例子。

关于python - 使用带或不带括号的 python 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572663/

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