python - 有没有内置的方法可以在 Python 中使用内联 C 代码?

标签 python c python-3.x cython inline

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

是否有一种内置方式(在 Python 标准库中)来包含内联 C 代码?

附言:scipy.weave用于提供此功能,但它仅适用于 Python 2。

最佳答案

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

这是一个例子,灵感来自 this articlethis question ,展示了如何在 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 文件不会被清理默认情况下,see here )
  • 这种快速内联使用在原型(prototype)设计/开发阶段特别有用。一切准备就绪后,您可以将构建(只做一次)和导入预编译库的其余代码分开

这似乎好得令人难以置信,但它似乎有效!

关于python - 有没有内置的方法可以在 Python 中使用内联 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65271060/

相关文章:

python - Pandas :合并collections.Counter(或者甚至只是dict)对象的列?

python - Sphinx 覆盖生成空的 python.txt 文件

python - 计算屏幕DPI

c - windows.h 没有这样的文件或目录(在 linux 上编译 c 代码)

c - 如何修复 `_meta' 的多个定义?

python - 使用字典作为查找表

python - 按字符拆分泰语文本

python - 如何将 tweepy 流 json 转储到文本文件中?

c - 键盘上编程键的开关盒。到目前为止这似乎正确吗?

python-3.x - 如何在 tensorflow 2.0b 中检查/释放 GPU 内存?