我想知道是否可以执行以下操作:如果函数将函数作为参数,我是否可以使它能够在循环中更改内部函数的参数?
我有一个函数,它接受任何函数f并将它集成在a,b上。问题是如果我在循环中想要整合cos(1 * x)然后cos(2 * x).... cos(N * x)我不知道如何使我的第一个函数理解当我比较整合(f(i),a,b)我不是指整合cos(1)或cos(2)但是cos(1 * x)或cos(2 * x)等等。
例如:
def integrate(f,a,b):
h = float(b-a)/10;
I = 0;
for i in range(10):
I+= f(h*i); <----(1)
return I;
A = zeros(N);
for k in range(N):
A[k] = integrate(cos(k), a,b) <-----(2)
我想要的是调用(2)中的cos(k)使得在(1)中变成f(k * h * i),这对你有意义吗?我想通过改变(2)来改变(1)的参数。我需要这个用于我正在做的傅立叶级数函数。它目前的工作方式是,不是在paranthesis中调用cos()和(k * h * i),而是调用cos(k)。
答案 0 :(得分:2)
您可以使用functools.partial
执行此操作:
import functools
def cos_(k, x):
return cos(k * x)
#...
A[k] = integrate(functools.partial(cos_, k), a, b)
此外,Python不需要分号。
答案 1 :(得分:1)
你没有将函数传递给integrate
,你传递的是cos(k)
返回的值。如果我正确理解了您的目标,则可以通过传递lambda (an anonymous function):
def integrate(f, a, b):
h = float(b-a)/10
I = 0;
for i in range(10):
I += f(h*i)
return I
A = zeros(N)
for k in range(N):
A[k] = integrate(lambda x: cos(k*x), a, b)
如果难以阅读,您可以使用“正常”def
d函数完成等效结束,该函数会关闭k
:
A = zeros(N)
for k in range(N):
def callback(x):
return k*x
A[k] = integrate(callback, a, b)
(代码未经测试)