1

我想制作一个装饰方法来分配函数将使用但不会自行传递的变量。

例如,在 lambda r 中添加新变量 y,我以这种方式编写代码但没有工作。

r = lambda x:x+y

def foo(func):
    def wrapped(*args,**kwargs):
        y = 3
        return func(y=y,*args,**kwargs)
    return wrapped

r = foo(r)
print(r(444))

这也行不通

r = lambda x:x+y

def foo(func):
    def wrapped(*args,**kwargs):
        y = 3
        return func(*args,**kwargs)
    return wrapped

r = foo(r)
print(r(444))
4

2 回答 2

6

kwargs是一个随便的python dict类型,所以你可以把ykey的值设置为3

r = lambda x, y=0:x+y

def foo(func):
    def wrapped(*args,**kwargs):
        print type(kwargs) #  will output <type 'dict'>
        kwargs['y'] = 3
        return func(*args,**kwargs)
    return wrapped

Understanding kwargs in Python中对此进行了详细解释。

于 2013-10-29T11:03:23.063 回答
2

问题是该函数r只能接受一个参数,您需要更改其定义以接受更多参数:

r = lambda x, y=0, *args, **kwargs: x + y

def foo(func):
    def wrapped(*args,**kwargs):
        y = 3
        return func(y=y, *args,**kwargs)
    return wrapped

r = foo(r)
print(r(444))
#447
于 2013-10-29T11:09:21.070 回答