2

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

def foo(a=4,b=3):
   return a+b
def bar(func,args):
   return func(*args)

所以如果我再打电话

bar(foo,[2,3])

返回值为 5。

我想知道有没有办法使用 bar 用 foo(b=12) 调用 foo,其中 bar 会返回 16?

这有意义吗?非常感谢您提前抽出时间!很抱歉问了这么多问题。

4

2 回答 2

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惯例;你可以为它们命名,*panda**grilled_cheese为所有 Python 关心。

于 2010-06-23T23:14:52.530 回答
4

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

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

bar(foo, {'b':12})
于 2010-06-23T23:15:43.990 回答