我可以把Cython代码转换成Python吗?

我可以把Cython代码转换成Python吗?,python,cython,Python,Cython,我已经编写了一个cython代码来帮助缩小第三方库和python之间的差距 我还用cython编写了一些代码来提高其性能 我可以将上述两个用例转换为原始python吗 用例一的示例 def f(double x): return x**2-x def integrate_f(double a, double b, int N): cdef int i cdef double s, dx s = 0 dx = (b-a)/N for i in ra

我已经编写了一个cython代码来帮助缩小第三方库和python之间的差距

我还用cython编写了一些代码来提高其性能

我可以将上述两个用例转换为原始python吗

用例一的示例

def f(double x):
    return x**2-x

def integrate_f(double a, double b, int N):
    cdef int i
    cdef double s, dx
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx
用例2的示例

from libc.stdlib cimport atoi

cdef parse_charptr_to_py_int(char* s):
    assert s is not NULL, "byte string value is NULL"
    return atoi(s)   # note: atoi() has no error detection!

对于您的第一个用例,答案是肯定的。 您需要做的就是像这样删除
cdef

def f(double x):
    return x**2-x

def integrate_f(double a, double b, int N):
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx
对于您的第二个用例,这就是问题的症结所在,因为您不能删除
cdef
行或将
cdef
重命名为
def
。此外,由于此用例依赖于外部库,因此它没有直接到python的转换

除了Cython之外,您还有两个选项可以使用

  • ctypes-内置于标准python中的外部函数库
  • cffi-一个与ctypes类似但简化了库代码的库
您使用ctypes的使用示例如下所示

def parse_charptr_to_py_int(test):
    from ctypes import cdll,c_char_p
    cdll.LoadLibrary("libc.so")
    return cdll.libc.atoi(c_char_p(test))
def parse_charptr_to_py_int(test):
    from cffi import FFI
    ffi = FFI()
    ffi.cdef("int atoi(const char *str);")
    CLib = ffi.dlopen("libc.so")
    return CLib.atoi(test)
您使用cffi的使用示例如下所示

def parse_charptr_to_py_int(test):
    from ctypes import cdll,c_char_p
    cdll.LoadLibrary("libc.so")
    return cdll.libc.atoi(c_char_p(test))
def parse_charptr_to_py_int(test):
    from cffi import FFI
    ffi = FFI()
    ffi.cdef("int atoi(const char *str);")
    CLib = ffi.dlopen("libc.so")
    return CLib.atoi(test)