python中的分部()替换函数
我有下面的代码,它适合我。我的问题是,一般来说,它为什么有效?python中的分部()替换函数,python,function,Python,Function,我有下面的代码,它适合我。我的问题是,一般来说,它为什么有效?partial()函数如何知道差商()中的f是一个函数。在partial()中,它被替换为x*x,这意味着返回(x*x(x+h)-x*x(x))/h。但这将改变错误的输出 从functools导入部分 def差商(f,x,h): 返回(f(x+h)-f(x))/h def方形(x): 返回x*x 导数_估计值1=部分(差商,平方,h=0.00001) 打印(衍生工具估算1(5)) 所以partial是一个类,它生成一个新函数,并预先填
partial()
函数如何知道差商()中的f是一个函数。在partial()
中,它被替换为x*x
,这意味着返回(x*x(x+h)-x*x(x))/h
。但这将改变错误的输出
从functools导入部分
def差商(f,x,h):
返回(f(x+h)-f(x))/h
def方形(x):
返回x*x
导数_估计值1=部分(差商,平方,h=0.00001)
打印(衍生工具估算1(5))
所以partial
是一个类,它生成一个新函数,并预先填充了一些参数(换句话说,您不需要提供它们)。传递给partial
的第一个参数是要运行的函数,即本例中的差商。然后,square
函数作为实际的“第一”参数传入difference\u quotient
,并通过关键字指定h
。然后,当您运行导数\u estimate1
时,它将运行差商(平方,5,h=0.00001)
,其中5是从新调用传入的
对于位置参数,它将从左到右填充,但由于您指定了h=0.00001,它将填充h而不是x,这意味着当您再次调用函数时,您可以提供的唯一参数是x
如果您尝试只将差商
传递到部分
中,如下所示:
导数\u估计1=部分(差商)
然后像这样运行它:
打印(导数估计1(5))
它会抱怨,因为你没有传递足够的论点
编辑:
为了更好地直接回答您关于Python的问题,了解它是一个函数:
Python本质上对它的变量一无所知。它只知道您打算将f
作为函数使用
如果我这样打电话:
导数\u估计值1=部分(差商,5,h=0.00001)
打印(导数估计1(5))
我得到一个错误,Python说它试图调用一个数字上的函数
TypeError:“int”对象不可调用
Python没有“魔法”来“知道”它是一个函数。它只是说“嘿,你正在尝试调用你传入的这个参数,所以它必须是一个函数。”
在partial()中,它被x*x替换
这是不正确的square
作为函数传入,然后在代码中调用该函数
我希望这能帮你把事情弄清楚。我明白了,我就是这么想的!谢谢你的澄清!我仍然要问的问题是f
如何被替换,因为它被函数x*x
替换,但是差商(f,x,h)
本身有一个x
。这就是python的工作方式吗?它将带有开放式主题的f
识别为一个函数?我希望我把我的问题说得更清楚:太好了,这正是我想说的。实际上它根本不知道。如果你以不同的顺序传递你的论点,那就行不通了。Python实际上根本不知道,只是您试图称之为它工作。如果你做了derivative\u estimate1=partial(差商,2,3)
,一旦你调用它,它就会失败,因为在你尝试使用之前,Python不知道任何变量的类型。因此,除非进行类型检查,否则可以轻松地为f
传递一个整数。我会给出我的答案。@sebastianortman如果我的答案对你有帮助,你会接受它作为答案吗?很高兴知道你已经弄明白了:)