在python装饰器处获取传递参数

时间:2018-10-23 08:07:15

标签: python inspect

def deco_test(func):
    def inner_function(*args, **kwargs):
        return func(*args, **kwargs)
    return inner_function

@deco_test
def a(a='asdf', b='asdf'):
    pass

if __name__ == '__main__':
    a(456, 789)
    a(123, b='qwer/123/a.txt')
    a(a='098', b='789456')    

我想得到这样的论点:

  1. {'a':456,'b':789}
  2. {'a':123,'b':'qwer / 123 / a.txt'}
  3. {'a':'098','b':'789456'}

deco_test(func)

1 个答案:

答案 0 :(得分:0)

您将无法访问a内为deco_test提供的参数。装饰是在声明函数时完成的,在调用函数之前,那时您还没有这些参数的信息。

inner_function内,您将获得修饰的函数调用a(456, 789)中提供的参数,将为您提供args=(456, 789)。如果您想根据a可以接受的参数来格式化它们,我认为您必须检查函数a