我正在尝试了解以下语法。为什么允许传递小于给定结果的参数?例如,
def fit_curve_custom(f, xdata, ydata, p0=None, sigma=None, **kwargs):
po, pc = curve_fit(f, xdata, ydata, p0, sigma, **kwargs)
def fit(x, a, b, c):
return a*exp(b)+c
(po, pun, rac, de) = fit_curve_custom(fit, xsamples, yobserved)
在上面的代码fit_curve_custom
中有六个参数,但是以后调用它时,仅传递了三个参数,但它仍能按预期运行吗?这个语法实际上有名称吗?此外,函数fit
具有四个参数,但是在fit_curve_custom
中调用该函数时,没有传递任何参数吗?为什么会这样?
答案 0 :(得分:1)
fit_curve_custom(fit, xsamples, yobserved)
之所以可行是因为fit_curve_custom
的最后两个参数是optional argument
或named arguments
如果未通过,将具有默认值 p0 =无,西格玛=无
最后一个kwargs
是关键字参数,这是python约定,允许将命名参数的dict
传递给函数,可以在函数内部访问kwargs['arg1']
例如:
fit_curve_custom(fit, xsamples, yobserved, p1 = None, sigma = None, arg1 = 'a', arg2 = 'b')
在fit_curve_custom(fit, xsamples, yobserved)
中,实际上没有调用fit
,而是将其传递给fit_curve_custom
函数(函数可以作为常规值传递)并被调用,例如:
def fit_curve_custom(f, xdata, ydata, p0=None, sigma=None, **kwargs):
calc_res = f(10, 10, 10, 10) # call f
po, pc = curve_fit(f, xdata, ydata, p0, sigma, **kwargs) # f is passed to another function