Python在循环中改变函数定义?

时间:2012-10-05 02:08:29

标签: python

我想知道是否可以执行以下操作:如果函数将函数作为参数,我是否可以使它能够在循环中更改内部函数的参数?

我有一个函数,它接受任何函数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)。

2 个答案:

答案 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)

(代码未经测试)