这个装饰器在 python 中是如何工作的

How does this decorator work in python

我有这个装饰器是别人用代码写的,但我无法得到它

def mydecorator(a, b):
        def f1(func):
            def new_func(obj):
                try:
                    f= func(obj) 
                except Exception as e:
                    pass
                else:
                    if f is None:
                        pass
                    else:
                        f = f, a, b

                return f
            return new_func
        return f1

这适用于这样的功能

@mydecorator('test1', 'test2')
def getdata():
   pass

我的想法是装饰器将函数名作为参数但是这里

我不知道 funcobj 是从哪里来的

这个-

@mydecorator('test1', 'test2')
def getdata():
   pass

类似于(没有创建 decofunc 名称)-

decofunc = mydecorator('test1', 'test2')
@decofunc
def getdata():
   pass

因为 mydecorator() returns f1 ,它接受函数作为参数。

然后它获取 getdata 函数作为参数。和 returns new_func ,名称 getdata 被替换为 new_func ,因此无论何时调用 getdata() 它都会调用此 new_func 函数,它在内部调用您原来的 getdata() 函数。