我们可以在函数调用时应用 python 装饰器吗?
Can we apply python decorator at function invoke?
比如说我有一个函数
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
这样我就不必担心在每次发布特定开源项目后合并我的代码。
装饰器只是语法糖,其中调用 @expression
的结果并使用 return 值替换装饰对象。
如果你只需要在一个位置有一个装饰函数,你可以 decorator(A)()
让它 return 装饰版本只用于 C
并调用装饰当场反对。
更好的是,存储装饰版本供 C 使用,这样您就不必每次都装饰它:
A_decorated = decorator(A)
def C():
# some code
A_decorated()
# some code
比如说我有一个函数
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
这样我就不必担心在每次发布特定开源项目后合并我的代码。
装饰器只是语法糖,其中调用 @expression
的结果并使用 return 值替换装饰对象。
如果你只需要在一个位置有一个装饰函数,你可以 decorator(A)()
让它 return 装饰版本只用于 C
并调用装饰当场反对。
更好的是,存储装饰版本供 C 使用,这样您就不必每次都装饰它:
A_decorated = decorator(A)
def C():
# some code
A_decorated()
# some code