2

在尝试读取一个填充了浮点数并填充real channels[7]它们的值的 Python 列表时(我使用的是 F2C,所以 real 只是浮点的 typedef),我能够从中检索到的只是零值。你能指出下面代码中的错误吗?

static PyObject *orbital_spectra(PyObject *self, PyObject *args) {
  PyListObject *input = (PyListObject*)PyList_New(0);
  real channels[7], coefficients[7], values[240];
  int i;

  if (!PyArg_ParseTuple(args, "O!", &PyList_Type, &input)) {
    return NULL;
  }
  for (i = 0; i < PyList_Size(input); i++) {
    printf("%f\n", PyList_GetItem(input, (Py_ssize_t)i)); // <--- Prints zeros
  }
//....
}
4

2 回答 2

3

PyList_GetItem将返回一个PyObject*. 您需要将其转换为 C 理解的数字。尝试将您的代码更改为:

printf("%f\n", PyFloat_AsDouble(PyList_GetItem(input, (Py_ssize_t)i)));
于 2011-02-22T14:56:22.407 回答
2

我在这段代码中看到的东西很少。

  1. 您泄漏了一个参考,不要在开始时创建那个空列表,这不是必需的。
  2. 您无需转换为PyListObject.
  3. PyList_GetItem返回 a PyObject,而不是浮点数。用于PyFloat_AsDouble提取值。
  4. 如果PyList_GetItem返回NULL,则抛出异常,您应该检查它。
于 2011-02-22T14:58:28.600 回答