我不確定你的意思是通過訪問參數和函數。我猜你是指傳遞給函數的參數。
對於你的用例,對於需要參數的裝飾器,你需要另一個包裝器函數,它將在運行時對傳給函數的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傳遞一個關鍵字參數,並且你希望在運行時調用該函數時測試傳遞給同一個關鍵字參數的值? –