У меня есть функция C, которая принимает функцию в качестве входа.Я хотел бы иметь возможность вызвать это из Python.Конечная цель состоит в том, чтобы функция ввода была определена в python, но оценена в C. В данный момент я просто пытаюсь заставить работать игрушечный пример.Итак, вот что я сделал ...
У меня есть файл заголовка, который я называю Test.h.Здесь есть одна функция, которая просто оценивает функцию с двумя аргументами.
#include <stdio.h>
double cEval( double ( *f )( double, double ), double n, double m ){
double k1 = f( n, m );
return k1;
};
Затем я написал файл Cython, чтобы обернуть свою функцию.Этот файл называется «Test.pyx».
cdef extern from "Test.h":
double cEval( double ( *f )( double, double ), double n, double m )
def Eval( f, n, m ):
return cEval( f, n, m )
Наконец, я написал файл установки.
from distutils.core import setup, Extension
from Cython.Build import cythonize
setup(ext_modules=cythonize('Test.pyx'))
Затем я компилирую файл «setup.py» с помощью команды «python setup.py build_ext --inplace», которая возвращает следующую ошибку:
Compiling Test.pyx because it changed.
[1/1] Cythonizing Test.pyx
/usr/lib64/python2.7/site-packages/Cython/Compiler/Main.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /maybehome/jritchie/c_interaction_example/Fun_Input/Test.pyx
tree = Parsing.p_module(s, pxd, full_module_name)
Error compiling Cython file:
------------------------------------------------------------
...
cdef extern from "Test.h":
double cEval( double ( *f )( double, double ), double n, double m )
def Eval( f, n, m ):
return cEval( f, n, m ) ^
------------------------------------------------------------
Test.pyx:5:15: Cannot convert Python object to 'double (*)(double, double)'
Traceback (most recent call last):
File "setup.py", line 4, in <module>
setup(ext_modules=cythonize('Test.pyx'))
File "/usr/lib64/python2.7/site-packages/Cython/Build/Dependencies.py", line 1086, in cythonize
cythonize_one(*args)
File "/usr/lib64/python2.7/site-packages/Cython/Build/Dependencies.py", line 1209, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: Test.pyx
Кто-нибудь знает, что я делаю неправильно и как я могу это исправить?