我可以把Cython代码转换成Python吗?
我已经编写了一个cython代码来帮助缩小第三方库和python之间的差距 我还用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
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类似但简化了库代码的库
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)