在python编辑中传递函数

时间:2014-04-17 04:00:51

标签: python function

from math import cos

def diff1(f, x): #approximates first derivative#
 h = 10**(-10)
 return (f(x+h) - f(x))/h

def newtonFunction(f,x):
 return x - f(x)/float(diff1(f,x))

y = cos
x0 = 3
epsilon = .001
print diff1(newtonFunction(y,x0), x0)

这只是代码的一部分,但我想计算diff1(f,x),其中f是newtonFunction但使用传递给NewtonMinimum的参数f。 diff1已经将f和x作为参数,我得到一个错误,说它需要newtonFunction的两个参数。

3 个答案:

答案 0 :(得分:0)

我认为你要找的是functools.partial

答案 1 :(得分:0)

问题在于f 不是 newtonFunction,而是newtonFunction(y,x0)返回的值。在这个例子中,它是一个浮点数,因此是'float' object not callable

如果要将函数作为参数传递给另一个函数,则只需使用其名称:

diff1(newtonFunction, x0)

另请注意,您将遇到另一个问题:在diff1中,您只使用一个参数调用f,但newtonFunction需要两个参数。

答案 2 :(得分:0)

diff1中,您遗失了*f(x+h)以及f(x)中的newtonFunction。您还将y作为内置函数离开,因此我假设您需要cos x0。这是您编辑的代码:

from math import cos

def diff1(f, x): #approximates first derivative#
 h = 10**(-10)
 return (f*(x+h) - f*(x))/h

def newtonFunction(f,x):
 return x - f*(x)/float(diff1(f,x))

y = cos
x0 = 3
epsilon = .001
print diff1(newtonFunction(y(x0),x0), x0)