Python:在for循环中添加函数

时间:2016-04-01 13:13:47

标签: python function for-loop function-call

亲爱的python Stackoverflow用户,

我想在循环中添加高斯函数,因为它可以使用+ =符号的整数来完成。但我不知道如何在循环中重新设置函数值。

我尝试过类似的事情:

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))

def f(x):
    return 0

for i in xdata:
    f(x) = f(x) + gaussian(x,i,20)

但是我收到了消息" SyntaxError:无法分配给函数调用"

我怎样才能做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:2)

根据我的评论:

  

将代码中的f(x)替换为y,并将def f(x): return 0替换为y = 0

你回答说:

  

好的,它有效!然后只能用字母定义一个函数,而不提变量!

这不是真的发生了什么。您没有定义函数。您希望使用f(x)不是一个功能。您定义的函数f只做一件事:

def f (x):
    return 0

该功能将始终返回0。一旦定义了这样的函数,它就不能被改变(不用另一个函数替换它)。

您要做的是收集函数结果,但不是f的结果,而是gaussian的结果。或者实际上,您希望收集gaussian函数调用的所有结果并总结它们。

所以你要做的是创建一个你将结果添加到的变量,这样就代表了这些函数调用的总和。

答案 1 :(得分:1)

f(x)返回一个结果,所以就像你说的那样0 = 12,例如......那会抛出一个错误,因为'='是赋值运算符,所以在它的左边,你应该只有变量(或第一次赋值的常量......)。

所以也许你想这样做:

y = f(x) + gaussian(x,i,20)

但我不想要你为什么要做一个“+ =”,因为它只适用于变量...而且你的函数总是返回0.所以你可能会说,而不是

def f(x):
    return 0

简单地

y = 0

然后,在循环中告诉

y += gaussian(x, i, 20).

或者,如果您想构建曲线,可以使用数组。

还有一个错误: x在循环中没有定义(在两个函数中定义,但仅作为局部变量)

答案 2 :(得分:1)

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))

y = sum(gaussian(x, i, 20) for i in xdata)