расширение TypeError: функция принимает ровно 0 аргументов (1 дано) - PullRequest
1 голос
/ 31 мая 2019

Когда я расширил метод функции языка C fibonacci в python, возникло исключение.

#include <Python.h>

long long fibonacci (unsigned int n){
    if (n < 2) {
        return 1;
    } else {
        return fibonacci(n -2) + fibonacci(n - 1);
    }

}

static PyObject* fibonacci_py(PyObject* self, PyObject* args){
    PyObject *result = NULL;
    long n;
    if(PyArg_ParseTuple(args, "1", &n)){
        if(n < 0){
            n = -n;
        }
        result = Py_BuildValue("L", fibonacci((unsigned int)n));
    }
    return result;
}

static char fibonacci_docs[] = "fibonacci(n): Return nth Fibonacci sequence number "
                                "computed recursively\n";

static PyMethodDef fibonacci_module_methods[] = {
    {"fibonacci", (PyCFunction)fibonacci_py,
    METH_VARARGS, fibonacci_docs},
    {NULL, NULL, 0, NULL}
};

static struct PyModuleDef fibonacci_module_definition = {
    PyModuleDef_HEAD_INIT,
    "fibonacci",
    "Extension module that provides fibonacci sequence function",
    -1,
    fibonacci_module_methods
};

PyMODINIT_FUNC PyInit_fibonacci(void) {
    Py_Initialize();
    return PyModule_Create(&fibonacci_module_definition);

setup.py

from setuptools import setup, Extension

setup(
    name='fibonacci',
    ext_modules=[
    Extension('fibonacci', ['fibonacci.c']),
    ]
)

и я запускаю команду pip: pip3 install -e.

вывод следующим образом:

  Obtaining file:///home/wzhang/code/learn
  Installing collected packages: fibonacci
    Running setup.py develop for fibonacci
  Successfully installed fibonacci

и когда я запускаю этот код:

from fibonacci import fibonacci
fibonacci(3)

Произошла ошибка: -

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: function takes exactly 0 arguments (1 given)
...