2010-06-23 91 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})