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

2024-04-28 15:19:50 发布

您现在位置: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)的参数。我需要一个傅里叶级数函数。它目前的工作方式是,它将只调用cos(k(k*h*i)),而不是在paranthesis中使用(k*h*i)调用cos()。在


Tags: 函数infor参数returndef方式zeros
2条回答

您可以使用^{}执行此操作:

import functools

def cos_(k, x):
    return cos(k * x)

#...
A[k] = integrate(functools.partial(cos_, k), a, b)

而且,Python不需要分号。在

您不是将函数传递给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)

如果很难读懂,可以使用“normal”defd函数完成等效的结尾,该函数在k上闭合:

^{2}$

(代码未测试)

相关问题 更多 >