考虑以下C ++模块(以下说明):
#include <Python.h>
#include "nr3python.h"
Doub tau_0;
static PyObject* analysis_c_set_parameters(PyObject *self, PyObject *pyargs) {
NRpyArgs args(pyargs);
Doub tau_0 = NRpyDoub(args[0]);
return NRpyObject();
}
Doub solver(const Doub t) {
return tau_0;
}
static PyObject* analysis_c_solver(PyObject *self, PyObject *pyargs) {
NRpyArgs args(pyargs);
const Doub t = NRpyDoub(args[0]);
const Doub result = solver(t);
return NRpyObject(result);
}
static PyMethodDef AnalysisCMethods[] = {
{"set_parameters", analysis_c_set_parameters, METH_VARARGS,
"Set fixed parameters for the optimization procedure."},
{"solver", analysis_c_solver, METH_VARARGS,
"Call the optimization function for solving for the spike time."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initanalysis_c(void)
{
(void) Py_InitModule("analysis_c", AnalysisCMethods);
}
请注意,此模块已设置为可以将其功能导入到Python脚本中。
我有一个全局变量tau_0
,声明没有初始值。调用函数analysis_c_set_parameters
时(在Python中),设置(或应设置)该值。然后在调用analysis_c_solver
时读取此值:analysis_c_solver
调用solver
,返回tau_0
。 analysis_c_solver
然后返回tau_0
。
我面临的问题是,当我在Python脚本中调用这些函数时,即使在我尝试将其设置为其他内容之后,我也会将0.0
作为tau_0
的值(例如,0.5
)。
在Python中我有
import analysis_c
TAU_0 = 0.5
t = 0
analysis_c.set_parameters(TAU_0)
actual_result = analysis_c.solver(t)
在这种情况下,actual_result
设置为0.0
。
这里发生了什么?
答案 0 :(得分:2)
此行声明并初始化一个新的局部变量:
Doub tau_0 = NRpyDoub(args[0]);
要分配您已声明需要编写的全局变量
tau_0 = NRpyDoub(args[0]);
答案 1 :(得分:0)
您似乎正在定义一个隐藏全局变量的局部变量:
Doub tau_0;
static PyObject* analysis_c_set_parameters(PyObject *self, PyObject *pyargs) {
NRpyArgs args(pyargs);
Doub tau_0 = NRpyDoub(args[0]); // here you are defining a local tau_0
return NRpyObject();
}