#python #c #python-c-api
#python #c #python-c-api
Вопрос:
Допустим, у меня есть float x из main
import progC
def main():
x = 3
y=progC(x)
print y
if __name__ == __main__
main()
#include <Python.h>
static PyObject* py_bracket(PyObject* self, float x){
x = x 5;
return Py_BuildValue("d",x);
}
хорошо, проблема в том, что мой float x в моей программе C получает 0, а не число 3 из python
Ответ №1:
Попробуйте это:
static PyObject* py_bracket(PyObject* self, PyObject* args){
float x;
if (!PyArg_ParseTuple(args, "f", amp;x))
return NULL;
x = x 5;
return Py_BuildValue("f",x);
}
Ответ №2:
На мой взгляд, проблему можно было бы решить, используя int
вместо float
. Переменные Python по умолчанию занимают 12 байт памяти, а «C float» — только 4. Второй вариант использует, PyTypeObject PyFloat_Type
который указывает, что float
тип является обязательным.