Когда я расширил метод функции языка 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)