我们可以在函数调用时应用 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