>  Q&A  >  본문

decorator - python中的带参数装饰器可以调用被装饰的函数中的参数不(除了全局变量)

例子:

def lo(func0, *args0, **kwargs0):
    def _wrapper(func):
        def wrapper(*args, **kwargs):
            func(*args, **kwargs)
            func0(*args0, **kwargs0)
        return wrapper
    return _wrapper


def f1(a):
    print a+1

@lo(f1, a)
def f(a):
    print a

f(1)

如何才能让装饰器lo调用函数f的参数a?

PHP中文网PHP中文网2742일 전853

모든 응답(1)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-17 13:09:38

    你在干什么?装饰器调用里那个 a 没有定义啊。不太明白你想干什么,参见X-Y 问题。

    你是想要这个么?

    def lo(func0):
        def _wrapper(func):
            def wrapper(*args, **kwargs):
                func(*args, **kwargs)
                func0(*args, **kwargs)
            return wrapper
        return _wrapper
    
    def f1(a):
        print(a+1)
    
    @lo(f1)
    def f(a):
        print(a)
    
    f(1)
    

    회신하다
    0
  • 취소회신하다