在python中使用全局变量/lambda函数时指针无效?

在python中使用全局变量/lambda函数时指针无效?,python,pointers,memory,lambda,Python,Pointers,Memory,Lambda,我遇到了一个奇怪的错误,我真的不知道是什么原因造成的 我有一个包含lambda函数的列表,我已经将这个列表设置为一个全局变量,如下所示。然后在“剩余”函数中引用全局变量,并提供所需的函数输入 from numpy import array from math import exp from guppy import hpy hp = hpy() hp.setrelheap() rate_array = [[0, "4.91*(10**-22)*(T_m**4)"],

我遇到了一个奇怪的错误,我真的不知道是什么原因造成的

我有一个包含lambda函数的列表,我已经将这个列表设置为一个全局变量,如下所示。然后在“剩余”函数中引用全局变量,并提供所需的函数输入

from numpy import array

from math import exp

from guppy import hpy   
hp = hpy()
hp.setrelheap()

rate_array = [[0, "4.91*(10**-22)*(T_m**4)"],                                                
              [1, "1.4*(10**-18)*(T_m**0.928)*exp(-T_m/16200)"]]  

global k

k = [0,0]

for i in range(0,2):

    k[i] = (eval('lambda T_m,T_r,Z_initial: ' + rate_array[i][1]))


def residual(t,y,yd):

    Z_initial = 10

    res_0 = -k[1](y[2],y[3], Z_initial)*y[0]
    res_1 = -k[0](y[2],y[3],Z_initial)*y[1]

    return array([res_0,res_1 ])



y = [0,0,0,0]
yd= [0,0,0,0]
t=0

residual(t,y,yd)


print("\nMemory statistics are as follows:\n")
print hp.heap()
运行残差函数似乎会产生无效指针错误或分段错误。代码偶尔会运行,但大多数时候不会。我看不出代码有什么问题,所以我不确定是怎么回事。有什么显而易见的吗

额外:我意识到这是一种奇怪的方式,但要解释一下:“rate_数组”包含字符串,因为它是pickle/unpickle的,这取决于用户是否想要编辑它

另外,残差函数由第三方软件集成,它只允许显示3个输入,因此我不能像正常情况一样将阵列作为输入传递到函数中。我也不能附加它来包含rate_数组,因为它不会将lambda函数作为可接受的类型

通常情况下,lambda函数/表达式可能只是在残差函数本身中,作为额外的代码行,但是用户不可能在代码运行之前编辑它们……真是一团糟

编辑:抱歉,为了让解释变得更简单,我大幅削减了代码,但在这个过程中,我只是输入了一些明显错误的东西,现在已经更正了

错误代码:

*** glibc detected *** python: free(): invalid pointer: 0x0000000002a7aa50 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7fd857ddbb96]
/usr/local/lib/python2.7/dist-packages/guppy/sets/setsc.so(+0xbeeb)[0x7fd841bd1eeb]
/usr/local/lib/python2.7/dist-packages/guppy/sets/setsc.so(+0xbf73)[0x7fd841bd1f73]
python[0x48abf9]
python[0x48a9de]
python(PyEval_EvalFrameEx+0x52c)[0x45fb2c]
python(PyEval_EvalFrameEx+0xcb7)[0x4602b7]
python(PyEval_EvalCodeEx+0x199)[0x467209]
python(PyEval_EvalCode+0x32)[0x4d0242]
python[0x5102bb]
python(PyRun_FileExFlags+0x9a)[0x44a466]
python(PyRun_SimpleFileExFlags+0x2bc)[0x44a97a]
python(Py_Main+0xb36)[0x44b6bc]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7fd857d7e76d]
python[0x4ce0ad]

到底什么时候出错?您遇到了什么错误?您正在使用numpy import*中的
?尝试重现这一点会很好……而且,这一行看起来像是语法错误:
res_0=-k[1](y[8],y[7],Z_首字母)*y[4]
global
不在那里-它在使用global的函数中。代码中似乎也有一些拼写错误。我建议给出一个定义了所有变量的完整示例。
Z_initial
残差
函数中是什么?如果我试图运行上面的代码,我会得到一个错误,它没有定义。请确保代码示例可运行!