使函数设置全局变量

时间:2015-11-13 00:01:44

标签: python c++ global-variables global python-c-api

考虑以下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_0analysis_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

这里发生了什么?

2 个答案:

答案 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();
}