比如说我有一个功能
def A(): pass
我从两个不同的地方调用此函数
def B():
#some code
A()
#some code
def C():
#some code
A()
#some code
我们知道装饰器,在外行语言中就像一个钩子,它允许你在函数调用之前和之后执行一组操作。我们使用@
在函数定义上应用装饰器。
我的要求就像我不希望每次调用函数时都应用装饰器。如上例所示,如果我在函数A
上应用装饰器。它将在两个调用中应用。我们可以在调用函数@
时使用A
吗?
类似的东西,
def A(): pass
def B():
#some code
A()
#some code
def C():
#some code
@decorator
A()
#some code
这样我就不必担心在每个特定的开源项目发布后合并我的代码。
答案 0 :(得分:3)
装饰器只是语法糖,调用@expression
的结果,返回值用于替换装饰对象。
如果您只需要在一个位置设置一个装饰函数,则可以decorator(A)()
让它返回一个仅用于C
的装饰版本,并在现场调用该装饰对象。 / p>
更好的是,将C的装饰版本存储起来使用,这样你就不会每次都装饰它:
A_decorated = decorator(A)
def C():
# some code
A_decorated()
# some code