我不确定你的意思是通过访问参数和函数。我猜你是指传递给函数的参数。
对于你的用例,对于需要参数的装饰器,你需要另一个包装器函数,它将在运行时对传给函数的kwargs进行kwargs测试。
实施例 -
>>> def arg(*args, **kwargs):
... def _decorator(func):
... def _wrapper(*args1, **kwargs1):
... # check for funcs args
... for k,v in kwargs.items():
... print("For key - ",k,v == kwargs1.get(k))
... func(*args1, **kwargs1)
... return _wrapper
... return _decorator
...
>>>
>>> @arg(l = 1)
... def b(l):
... print("In B", l)
...
>>> b(l=1)
For key - l True
In B 1
>>> b(l=2)
For key - l False
In B 2
编辑:这是为不带参数的装饰。
外部函数接收函数作为参数,内部函数接收函数的参数。
一个很简单的例子 -
>>> def a(func):
... def x(*args, **kwargs):
... print(args, kwargs)
... func(*args, **kwargs)
... return x
...
>>> @a
... def b(y):
... print("In b", y)
...
>>> b("Hello")
('Hello',) {}
In b Hello
你能澄清你想要的参数做什么? –
@AnandSKumar我只想获得函数的一个kwargs值并将其与传入装饰器的值进行比较。 – nazerb
所以你可以在定义函数时向decorator传递一个关键字参数,并且你希望在运行时调用该函数时测试传递给同一个关键字参数的值? –