我想制作一个装饰方法来分配函数将使用但不会自行传递的变量。
例如在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))
答案 0 :(得分: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
答案 1 :(得分:1)
kwargs
是一个随意的python dict类型,所以你可以将y
键的值设置为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中详细解释了这一点。