Python通过函数包装器传递变量赋值

时间:2010-06-23 23:12:28

标签: python variables function argument-passing

所以我知道你可以通过执行以下操作将函数包装在另一个函数周围。

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),其中bar会返回16?

这有意义吗?非常感谢你提前的时间!抱歉问了这么多问题。

2 个答案:

答案 0 :(得分:11)

这需要**kwargs (keyword arguments)语法。

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

答案 1 :(得分:4)

是的,除了(或代替)列表之外,您还可以传递一个字典:

def bar(func, args=[], kwargs={}):
    return func(*args, **kwargs)

bar(foo, {'b':12})