我想知道在Python中使用* args时是否可以保留一个可选参数(使用它的默认值)。以下代码通过“print(a)”工作,因此在deri函数调用中明确包含可选参数h。我能以某种方式离开(h)吗?我的尝试(“b = ......”,“c = ......”,“d = ......”)失败了。还有另一种方式吗?
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 :(得分:2)
不,python将位置参数应用于所有命名参数 first ; h
是函数签名中的第三个位置参数,因此*params
仅捕获4个及以上的参数位置。
相反,使用**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)
答案 1 :(得分:1)
看起来你正在使用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