可以在Python函数中省略可选参数并使用*args吗?

2024-06-16 10:56:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道在Python中使用*args时,是否可以省略可选参数(使用它的默认值)。以下代码通过“print(a)”工作,因此在deriv函数调用中显式地包含可选参数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)

Tags: 代码参数returndefargsparams省略f1
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

不,python将位置参数应用于所有命名参数,firsth是函数签名中的第三个位置参数,因此,*params只捕获参数位置4及以上。在

相反,请使用一个**kwargs参数来捕获任意关键字参数,并在h中查找:

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

现在在调用deriv时,必须显式地命名h

^{pr2}$

相关问题 更多 >