2

float番号で満たされたPythonリストを読み取り、real channels[7]それらの値を入力しようとしている間(F2Cを使用しているため、realはfloatの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_GetItemPyObjectfloat ではなく を返します。PyFloat_AsDouble値を抽出するために使用します。
  4. PyList_GetItemが返される場合はNULL、例外がスローされているため、確認する必要があります。
于 2011-02-22T14:58:28.600 に答える