我有以下代码对我有用。我的问题是从总体上讲为什么有效? partial()
函数如何知道difference_quotient()
中的f是一个函数。在partial()
中它被替换为x*x
,这意味着return(x*x(x+h)-x*x(x))/h
。但这会改变输出蜂鸣声。
from functools import partial
def difference_quotient(f, x, h):
return(f(x+h)-f(x))/h
def square(x):
return x*x
derivative_estimate1 = partial(difference_quotient, square, h=0.00001)
print(derivative_estimate1(5))
答案 0 :(得分:1)
因此partial
是一个类,它将生成一个新函数,其中预先填充了一些参数(换句话说,您不需要提供它们)。传递给partial
的第一个参数是您将要运行的函数,在您的情况下为difference_quotient
。然后,将square
函数作为实际的“第一个”参数传递给difference_quotient
,并通过关键字指定h
。然后,当您运行derivative_estimate1
时,它将运行difference_quotient(square, 5, h=0.00001)
,其中从您的新呼叫中传入5。
对于位置参数,它将从左到右填充,但是由于您指定了h = 0.00001,所以它填充了h而不是x,这意味着当您再次调用该函数时,唯一可以提供的参数是{{ 1}}。
如果您仅尝试像这样将x
传递到difference_quotient
:
partial
然后像这样运行它:
derivative_estimate1 = partial(difference_quotient)
它会抱怨,因为您没有传递足够的参数。
编辑: 为了更好地直接回答关于Python的问题,知道它是一个函数:
Python本质上不了解变量。它只知道您打算将print(derivative_estimate1(5))
用作函数。
如果我这样拨打电话:
f
derivative_estimate1 = partial(difference_quotient, 5, h=0.00001)
我收到一个错误,指出Python试图在数字上调用函数。
print(derivative_estimate1(5))
Python并没有“神奇”地“知道”其功能。它只是说:“嘿,您正在尝试调用传入的该参数,因此它必须是一个函数。”
在partial()中,它将替换为x * x
这不是真的。 TypeError: 'int' object is not callable
作为函数传入,然后您只需在代码中调用该函数即可。
我希望为您清除一切。