即使numba, cython(尤其是cython.inline)存在,在某些情况下,在 Python 中使用内联 C 代码也会很有趣。
是否有内置方式(在 Python 标准库中)具有内联 C 代码?
PS:scipy.weave曾经提供过这个,但它只是 Python 2。
即使numba, cython(尤其是cython.inline)存在,在某些情况下,在 Python 中使用内联 C 代码也会很有趣。
是否有内置方式(在 Python 标准库中)具有内联 C 代码?
PS:scipy.weave曾经提供过这个,但它只是 Python 2。
直接在 Python 标准库中,可能不是。但是使用cffi模块 ( pip install cffi) 可以在 Python 中拥有非常接近内联 C 的东西。
这是一个示例,受这篇文章和这个问题的启发,展示了如何在 Python +“内联”C 中实现阶乘函数:
from cffi import FFI
ffi = FFI()
ffi.set_source("_test", """
long factorial(int n) {
long r = n;
while(n > 1) {
n -= 1;
r *= n;
}
return r;
}
""")
ffi.cdef("""long factorial(int);""")
ffi.compile()
from _test import lib # import the compiled library
print(lib.factorial(10)) # 3628800
笔记:
ffi.set_source(...)定义实际的 C 源代码ffi.cdef(...)相当于.h头文件cython.inline默认情况下不会清理编译的 .pyd 文件,请参见此处)这似乎好得令人难以置信,但它似乎有效!