2013-11-24 30 views
0

我想弄清楚在Python中使用* args時是否可以保留一個可選參數(使用它的默認值)。以下代碼通過「print(a)」工作,因此在deriv函數調用中顯式包含可選參數h。我能以某種方式離開它(h)嗎?我的嘗試(「b = ...」,「c = ...」,「d = ...」)失敗。有另一種方法嗎?可以省略可選參數並在Python函數中使用* args?

def deriv(f, x, h=1.e-9, *params): 
    return (f(x+h, *params)-f(x-h, *params))/(2.*h) 

def f1(x, a, p): 
    return a*x**p 

a = deriv(f1, 3, 1.e-9, 4, 5) 
print(a) 

b = deriv(f1, 3, , 4, 5) 
c = deriv(f1, 3, 4, 5) 
d = deriv(f1, 3, h, 4, 5) 
+0

Python版本? –

回答

2

沒有,蟒蛇應用於位置參數的所有命名參數第一; h是函數簽名中的第三個位置參數,因此只有參數位置4和以上被*params捕獲。

相反,使用**kwargs參數捕捉任意關鍵字參數,並期待h高達在於:

def deriv(f, x, *params, **kwargs): 
    h = kwargs.pop('h', 1.e-9) 

您現在有命名h顯式調用deriv時:

b = deriv(f1, 3, 4, 5, h=2.0) 
2

它看起來就像你使用Python 3一樣,所以你可以使用keyword-only arguments

>>> def deriv(f, x, *params, h=1.0E-9): 
    print(f) 
    print(x) 
    print(params) 
    print(h) 

>>> deriv(pow, 'x', 10, 20, 30) 
<built-in function pow> 
x 
(10, 20, 30) 
1e-09 

>>> deriv(pow, 'x', 10, 20, 30, h=.2) 
<built-in function pow> 
x 
(10, 20, 30) 
0.2 
相關問題