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}