Python 从函数装饰器访问函数参数
如果我有一个如下所示的函数:Python 从函数装饰器访问函数参数,python,Python,如果我有一个如下所示的函数: @app.route('/categories/id/<int:id>/edit') @login_required def edit_category(id): #some code... 如何从login\u required decorator访问app.route decorator作为参数提供给编辑\u category的id变量?包装函数的位置参数位于args(第一个参数-*args),方法的关键字参数位于kwargs(第二个参数-*
@app.route('/categories/id/<int:id>/edit')
@login_required
def edit_category(id):
#some code...
如何从login\u required decorator访问app.route decorator作为参数提供给编辑\u category的id变量?包装函数的位置参数位于
args
(第一个参数-*args
),方法的关键字参数位于kwargs
(第二个参数-**kwargs
)
args
是一个元组,其中第一个元素引用第一个位置参数,第二个元素引用第二个位置参数
kwargs
是一个字典,其中键是关键字(用于参数),值是为该关键字传入的值
范例-
>>> def decor(func):
... def wrapper(*args, **kwargs):
... print('args - ',args)
... print('kwargs - ',kwargs)
... return func(*args, **kwargs)
... return wrapper
...
>>> @decor
... def a(*a, **b):
... print("In a")
... print(a)
... print(b)
...
>>> a(1,2,x=10,y=20)
args - (1, 2)
kwargs - {'y': 20, 'x': 10}
In a
(1, 2)
{'y': 20, 'x': 10}
您可以通过打印args
和kwargs
来测试app.route
是否将id
作为位置参数或关键字参数发送,并获取正确的值。我认为它可能作为位置参数,如果是,它将是args
的第一个元素
>>> def decor(func):
... def wrapper(*args, **kwargs):
... print('args - ',args)
... print('kwargs - ',kwargs)
... return func(*args, **kwargs)
... return wrapper
...
>>> @decor
... def a(*a, **b):
... print("In a")
... print(a)
... print(b)
...
>>> a(1,2,x=10,y=20)
args - (1, 2)
kwargs - {'y': 20, 'x': 10}
In a
(1, 2)
{'y': 20, 'x': 10}