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
没有传递参数?为什么会这样?
解决方案
fit_curve_custom(fit, xsamples, yobserved)
这是可能的,因为最后两个参数fit_curve_custom
是optional argument
或named 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
推荐阅读
- node.js - 如何在 Kubernetes 上的 Node.js 中扩展 kafka 消费者
- module - Lua 无法打开 libcairo 并出现错误“未定义符号:luaopen_libcairo”
- python - 制作 django AJAX likes 时出现操作错误
- java - MongoDB Atlas 中的数值搜索如何工作?
- c# - log4net 在类库中找不到我的自定义布局类
- html - 当我在 PC 上运行此 Search Collapsible Tree 代码时,它不起作用?
- time-complexity - Dijkstra 算法复杂度与 BFS 复杂度
- .net - .NET 表单大小缩放问题
- javascript - Google Apps 脚本:使用 GetMonth 从电子表格获取的日期时获取 NaN
- spring-boot - Spring Boot stomp 多次发送 RECEIPT 帧