您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:SWIG与ctypes

Python:SWIG与ctypes

SWIG生成(相当难看)C或C ++代码。它对于简单的函数(可以直接翻译的事物)简单易用,对于更复杂的函数(例如带有输出参数的函数,需要用额外的翻译步骤来用Python表示)则相当简单易用。需要将C的位写为接口文件的一部分。对于除简单使用之外的任何内容,您都需要了解cpython及其如何表示对象- 不难,但要记住一些东西。

ctypes允许您直接访问C函数,结构和其他数据,并加载任意共享库。您不需要为此编写任何C,但是您确实需要了解C的工作原理。您可能会争辩说,它是SWIG的另一面:它不会生成代码,并且不需要在运行时进行编译器,但是对于简单使用而言,它确实需要您了解C数据类型,转换,内存管理和对齐工作。您还需要手动或自动将C结构,联合和数组转换为等效的ctypes数据结构,包括正确的内存布局。

在纯执行中,SWIG可能比ctypes更快- 因为围绕实际工作的管理是在C时在编译时完成的,而不是在Python时运行的。但是,除非您接口许多不同的C函数,但每次仅接口几次,否则开销实际上并不太明显。

在开发期间,ctypes的启动成本要低得多:您不必了解接口文件,不必生成.c文件并进行编译,也不必检出和静警告。您只需花很少的精力就可以开始使用单个C函数,然后将其扩展为更多功能。您可以直接在Python解释器中进行测试并尝试尝试。打包大量代码有些乏味,尽管有人尝试使代码简化(例如ctypes- configure)。

另一方面,SWIG可用于为多种语言生成包装器(除非需要填写特定于语言的详细信息,例如上面提到的自定义C代码。)当包装大量SWIG可以处理的代码时,几乎不需要帮助,代码生成也可以比等效的ctypes简单得多。

python 2022/1/1 18:43:47 有287人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶