2010-06-23 89 views
1

所以我知道你可以通过执行以下操作来围绕另一个函数包装一个函数。Python通过函数包装器传递变量赋值

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

,所以如果我当时叫

bar(foo,[2,3]) 

返回值是5

我想知道有没有用吧打电话与富富的方式(B = 12)哪里酒吧会返回16?

这是否有意义?提前感谢你的时间!抱歉提出这么多问题。

回答

10

这需要**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按照惯例。您可以将它们命名为*panda**grilled_cheese以供所有Python关心。

+0

感谢马克!这是完美的,正是我需要的! – 2010-06-24 16:24:43

4

是的,你也可以通过另外一个字典到(或代替)名单:

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

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