当前位置: 首页 > 面试题库 >

Python:SWIG与ctypes

党星鹏
2023-03-14
问题内容

在python中,什么情况下SWIG比ctypes更好的选择是在共享库中调用入口点?假设您还没有SWIG接口文件。

两者的性能指标是什么?


问题答案:

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简单得多。



 类似资料:
  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?

  • 问题内容: 为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法? 短: 长: 问题答案: 在HTML5中,它们是等效的。使用较短的一个,更容易记住和键入。浏览器支持很好,因为它是为向后兼容而设计的。

  • 连接的多个输入都相当于Yes的时候才会输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:10:00,响起猫叫声小闹钟 工作原理 当所有的输入都是Yes的时候,与节点才输出Yes。

  • 问题内容: 似乎有三种 相同的 方法可以独立于平台获取依赖于平台的“文件分隔符”: 我们如何决定何时使用哪个? 它们之间甚至有什么区别吗? 问题答案: 可以通过调用命令行参数或使用命令行参数覆盖 获取默认文件系统的分隔符。 获取默认文件系统。 获取文件系统的分隔符。请注意,作为一种实例方法,在需要代码在一个JVM中对多个文件系统进行操作的情况下,可以使用该方法将不同的文件系统传递给代码(而不是默认

  • 问题内容: 我今天刚刚与一些同事讨论了python的db-api fetchone vs fetchmany vs fetchall。 我确定每个应用程序的用例都取决于我正在使用的db-api的实现,但是总的来说,fetchone,fetchmany,fetchall的用例是什么? 换句话说,以下等效项是什么?还是其中之一比其他人更受青睐?如果是这样,在哪些情况下? 问题答案: 我认为这确实取决于