Can omit optional arguments and use *args in a Python function?
本问题已经有最佳答案,请猛点这里访问。
我试图弄清楚在python中使用*args时是否可以去掉一个可选参数(使用它的默认值)。以下代码通过"print(a)"工作,因此在派生函数调用中显式包含可选参数h。我能把它放在外面吗?我的尝试("B=…","C=…","D=…")失败。还有别的办法吗?
1 2 3 4 5 6 7 8 9 10 11 12 | 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) |
不,python首先将位置参数应用于所有已命名的参数;
相反,使用
1 2 | def deriv(f, x, *params, **kwargs): h = kwargs.pop('h', 1.e-9) |
在调用
1 | b = deriv(f1, 3, 4, 5, h=2.0) |
看起来您使用的是python 3,所以您可以只使用关键字参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> 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 |