Python 中是否有使用内联 C 代码的内置方法?

Bas*_*asj 6 c python inline cython python-3.x

即使numba, cython(尤其是cython.inline)存在,在某些情况下,在 Python 中包含内联 C 代码也会很有趣。

是否有内置方法(在Python标准库中)来拥有内联C代码?

PS:scipy.weave曾经提供过这个功能,但它仅限于 Python 2。

Bas*_*asj 7

直接在Python标准库中,可能不是。cffi但使用模块 ( )可以在 Python 中拥有非常接近内联 C 的东西pip install cffi

这是一个受本文这个问题启发的示例,展示了如何在 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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • ffi.set_source(...)定义实际的 C 源代码
  • ffi.cdef(...)相当于.h头文件
  • 当然,如果您最后不需要编译的库,您当然可以在之后添加一些清理代码(但是,cython.inline执行相同的操作并且默认情况下不会清理编译的 .pyd 文件,请参见此处
  • 这种快速内联使用在原型设计/开发阶段特别有用。一切准备就绪后,您可以将构建(只需执行一次)与导入预编译库的其余代码分开

这看起来好得令人难以置信,但它似乎确实有效!

  • `cffi` 不在 Python 标准库中,因此这不满足您在问题中提出的约束。 (6认同)