繁体   English   中英

如何在(* args,** kwargs)部分中插入新变量?

[英]how to insert new variable in (*args,**kwargs) section?

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

例如在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))

问题是函数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

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

了解Python中的kwargs时,将对此进行详细说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM