通过函数包装器在Python中传递变量赋值
我知道你可以把一个函数放在另一个函数里面,方法是这样做的。
def foo(a=4,b=3):
return a+b
def bar(func,args):
return func(*args)
所以如果我接着调用
bar(foo,[2,3])
返回的结果会是5。
我在想有没有办法用bar来调用foo,并且让foo(b=12)的结果是16?
这样说清楚了吗?非常感谢你提前的时间!抱歉问了这么多问题。
2 个回答
4
没错,你可以传递一个字典,除了(或者替代)列表以外:
def bar(func, args=[], kwargs={}):
return func(*args, **kwargs)
bar(foo, {'b':12})
11
这需要使用 **kwargs
(关键字参数) 的语法。
def foo(a=4, b=3):
return a+b
def bar(func, *args, **kwargs):
return func(*args, **kwargs)
print bar(foo, b=12) # prints 16
其中,*args
可以接收任意数量的位置参数,而 **kwargs
则是所有传入的命名参数。
当然,*args
和 **kwargs
只是约定俗成的名字;在 Python 看来,你可以把它们命名为 *panda
和 **grilled_cheese
,这完全没问题。