在没有所有给定参数的情况下调用函数

时间:2020-08-12 00:07:24

标签: python

我正在尝试了解以下语法。为什么允许传递小于给定结果的参数?例如,

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中调用该函数时,没有传递任何参数吗?为什么会这样?

1 个答案:

答案 0 :(得分:1)

fit_curve_custom(fit, xsamples, yobserved)

之所以可行是因为fit_curve_custom的最后两个参数是optional argumentnamed 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