Python中Lambda函数的名称错误

时间:2019-03-14 20:40:23

标签: python python-3.x lambda anonymous-function

我正在处理以下示例。我想在以下代码段的最后一行中使用mu>=0.9运行我的代码。

alpha,beta,loc,scale = stats.beta.fit(value)  

error=(scale/(1.96))**2

gpdf = lambda B0, mu, sigma2: 1/np.sqrt(2*pi*sigma2)*np.exp(-1/2*((B0-mu)**2)/sigma2)
approx_sigma2 = lambda scale: (scale/(1.96))**2
ggpdf_v  = lambda B0, D0, error: gpdf(B0, mu=0.8, sigma2=error) * (D0 < 3) + (D0 >= 3) * gpdf(B0, mu=0.5, sigma2=error)
ggpdf_r  = lambda B0, D0, error: gpdf(B0, mu=0.5, sigma2=error)
ggpdf_c  = lambda B0, D0, error: gpdf(B0, mu=0.7, sigma2=error)
ggpdf_v  = lambda B0, D0, error: gpdf(B0, mu>=0.9, sigma2=error)

但是,我收到此错误NameError: name 'mu' is not defined。它已经定义,但我看不到问题。如何解决此错误?

2 个答案:

答案 0 :(得分:0)

gpdf(B0, mu=0.7, sigma2=error)

实际上是一个函数的语法,将0.7分配给该函数中名为mu的参数,并将error的值分配给该函数中名为sigma2的参数。

mu>=0.9不是在函数调用中分配给关键字参数的有效Python语法,但它是有效的普通Python表达式。但是,要对该表达式求值,必须定义变量mu,实际上不是。但是即使定义了它,我也怀疑它会做您想要的事情:它将True作为该函数的参数传递。

答案 1 :(得分:0)

正如其他地方所提到的,这来自您在关键字分配>=中的错字,而不是=。之所以令人困惑,是因为在定义f2时,只有在评估f2时(因为它隐藏在lambda中),您才可以点击它。

这是显示问题的最小示例。

>>> f1 = lambda a: None
>>> f2 = lambda: f1(a >= 0)
>>> f2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
NameError: name 'a' is not defined