Я не уверен, что вы имеете в виду, обратившись к аргументам и функции. Я предполагаю, что вы имеете в виду аргументы, переданные функции.
Для вашего использования, для декораторов, которые принимают аргументы, вам нужна другая функция-обертка, которая проведет тестирование 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
EDIT: Это для декораторов без аргументов.
Внешняя функция принимает функцию как аргумент, а внутренняя функция принимает аргументы функции.
Очень простой пример -
>>> 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 Я просто хочу получить одно из значений одного из кваргов функции и сравнить его со значением, переданным в декоратор. – nazerb
, чтобы вы передали аргумент ключевого слова декоратору во время определения функции и хотите проверить значение, переданное этому же аргументу ключевого слова, когда функция вызывается во время выполнения правильно? –