Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的分部()替换函数_Python_Function - Fatal编程技术网

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如果我的答案对你有帮助,你会接受它作为答案吗?很高兴知道你已经弄明白了:)