我编写了一个cython代码来帮助弥合第三方库和python之间的差距。
我还在cython中编写了一些代码以改善其性能。
我可以将上述两个用例转换为原始python吗?
用例1的示例
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!
答案 0 :(得分:2)
首先使用案例,答案是肯定的。
您需要做的只是删除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,您还可以使用2个选项。
使用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))
使用cffi的用法示例如下所示
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)