在python中,函數參數的工作方式其實很簡單。當你編寫func(a,b,c,d=some,e=value)時,位置和關鍵字參數其實分別是被打包成元組和字典的。函數實際接收到的是一個元組args和一個字典kwargs,並在內部完成如下轉換:
a,b,c=args
d=kwargs.get('d',d_default_value)
e=kwargs.get('e',e_default_value)
這一切都是在幕後悄悄發生的。當然,它還會執行一些錯誤檢查,還允許你將位置參數當成關鍵字參數那樣進行指定(即使它們在函數定義中並不是關鍵字參數)。
def say_hello_then_call_f(f,*args,**kwargs):
print("args is: ",args)
print("kwargs is: ",kwargs)
print("Hello! Now I'm going to call %s"%f)
return f(*args,**kwargs)
def g(x,y,z=1):
return (x+y)/z
print(say_hello_then_call_f(g,1,2,z=5.))
然後,如果我們通過調用g,就會得到:
args is: (1, 2)
kwargs is: {'z': 5.0}
Hello! Now I'm going to call <function g at 0x7f4330d041e0>
0.6