gpt4 book ai didi

python decorator - 是否可以返回一个需要更多参数的函数?

转载 作者:行者123 更新时间:2023-12-04 03:36:08 27 4
gpt4 key购买 nike

我有一个非常简单的函数,定义为

def test(x):
return x

我想用装饰器包装它,它返回一个需要另一个 kwargs 参数的函数。

@simple_dec
def test(x):
return x

在那个装饰器函数中,我会从 kwargs 字典中弹出那个参数,并且只需调用带有参数测试的测试函数就可以得到,而不会破坏它:

def simple_dec():

def simple_dec_logic(func, *args, **kwargs):
kwargs.pop("extra_param")
return func(*args, **kwargs)

return decorator.decorate(_func, simple_dec_logic)

我的问题是 - 包装后,如果我调用:

test(1, extra_param=2)

它在“test got unexpected param extra_param”上失败,尽管如果代码实际运行,装饰器会处理这个并调用测试 func,没有那个参数。如果我理解正确,在运行代码并知道它是用装饰器定义的之前,解释器只会让它失败。

有什么办法可以解决这个问题吗?我希望装饰器允许我使用更多参数调用测试函数,而不是在测试函数中定义它们。

最佳答案

这很好用:

import functools

def decorator(func):
@functools.wraps(func)
def wrapper_decorator(*args, **kwargs):
kwargs.pop('extra_param')
value = func(*args, **kwargs)
return value
return wrapper_decorator

@decorator
def test(x):
return x

test(1, extra_param=2)

关于python decorator - 是否可以返回一个需要更多参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66885791/

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