所以我知道你可以通过执行以下操作将函数包装在另一个函数周围。
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?
这有意义吗?非常感谢你提前的时间!抱歉问了这么多问题。
答案 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})