让一个函数设置一个全局变量
Having a function set a global variable
考虑以下 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
,returns tau_0
。 analysis_c_solver
然后 returns 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
。
这是怎么回事?
您似乎在定义一个隐藏全局变量的局部变量:
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();
}
这一行声明并初始化了一个新的局部变量:
Doub tau_0 = NRpyDoub(args[0]);
要分配给您已经声明的全局变量,您需要编写
tau_0 = NRpyDoub(args[0]);
考虑以下 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
,returns tau_0
。 analysis_c_solver
然后 returns 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
。
这是怎么回事?
您似乎在定义一个隐藏全局变量的局部变量:
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();
}
这一行声明并初始化了一个新的局部变量:
Doub tau_0 = NRpyDoub(args[0]);
要分配给您已经声明的全局变量,您需要编写
tau_0 = NRpyDoub(args[0]);