gpt4 book ai didi

python - 从函数装饰器访问函数参数

转载 作者:太空狗 更新时间:2023-10-29 18:31:23 24 4
gpt4 key购买 nike

如果我有一个看起来像这样的函数:

@app.route('/categories/id/<int:id>/edit')
@login_required
def edit_category(id):
#some code...

login_required 装饰器看起来像这样

def login_required(f):
@wraps(f)
def wrapper(*args, **kwargs):
print id #given to edit_category by app.route decorator
return f(*args, **kwargs)
return wrapper

如何从 login_required 装饰器访问 app.route 装饰器作为参数提供给 edit_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}

您可以通过打印 argskwargs< 来测试 app.route 是否将 id 作为位置参数或关键字参数发送 并取正确的值。我认为它可能作为位置参数出现,如果是这样,它将是 args 的第一个元素。

关于python - 从函数装饰器访问函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32448956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com