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

2 投票
2 回答
2407 浏览
提问于 2025-04-16 00:21

我知道你可以把一个函数放在另一个函数里面,方法是这样做的。

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,这完全没问题。

撰写回答