为什么'ctypes'比扩展python慢?

为什么'ctypes'比扩展python慢?,python,Python,我用C实现了一个简单的递归斐波那契函数,并使用两种主要场景创建了python绑定 使用ctypes 用C语言编写模块扩展python 我意识到,使用ctypes时,转换发生在python端,因此预期函数调用的开销会更高 但是,对于长时间运行的函数,开销可以忽略不计。我得到的结果正好相反。通过平均多次调用,对于fibonacci(5),ctypes的速度要慢两倍。然而,对于fibonacci(50)来说,速度要慢近3倍。对此的解释是什么?只要被调用函数中的本机代码相同,它们的性能就应该完全相同

我用C实现了一个简单的递归斐波那契函数,并使用两种主要场景创建了python绑定

  • 使用
    ctypes
  • 用C语言编写模块扩展python
我意识到,使用
ctypes
时,转换发生在python端,因此预期函数调用的开销会更高


但是,对于长时间运行的函数,开销可以忽略不计。我得到的结果正好相反。通过平均多次调用,对于
fibonacci(5)
,ctypes的速度要慢两倍。然而,对于
fibonacci(50)
来说,速度要慢近3倍。对此的解释是什么?

只要被调用函数中的本机代码相同,它们的性能就应该完全相同。也许您使用的是不同的优化标志?另外,一个好的实验可能是在C扩展中导出fib函数,编译C扩展而不导入它,然后使用ctypes加载函数。@FilipDimitrovki:谢谢,我会试试的。