首页 > 解决方案 > 调用没有所有给定参数的函数

问题描述

我试图理解以下语法。为什么允许传入小于给定结果的参数?例如,

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没有传递参数?为什么会这样?

标签: python

解决方案


fit_curve_custom(fit, xsamples, yobserved)

这是可能的,因为最后两个参数fit_curve_customoptional argumentnamed arguments

如果没有通过将有一个默认值 p0=None, sigma=None

最后一个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

推荐阅读