4

Python/C API 有许多相关的函数,它们执行类似的操作,其中一个通常用于一般用途,而另一个在特定情况下更有效或更方便。

例如PyDict_SetItemPyDict_SetItemString是相同的,但后者专门用于 C 字符串作为键。对于PyList_SetItemand PyList_SET_ITEM,第二个没有错误检查,并且不会减少现有项目(在此处解释)。

PyInt_FromLong但是,像always那样进行特殊转换的原因是Py_BuildValue什么?两者都返回对 Python 对象的新引用,并且似乎做同样的事情。同样的问题适用于 , 等函数PyInt_FromSsize_tPyTuple_Pack当然,所有这些都与Py_BuildValue适当的格式字符串进行比较)。

什么时候应该使用其中一种?

4

1 回答 1

4

对我来说,这是性能和简单性之间的权衡。对于我编写的代码,当我不关心运行时间时(即返回一组不会改变的值,或者运行时间太长,额外的开销无关紧要),我倾向于使用 Py_BuildValue .) 对于性能关键函数,尤其是那些可能位于循环最内层的函数,我将尽可能使用使用最低级别的 API 调用。

值不值是另外一个问题。我永远不会收回我为获得最佳性能而花费的时间,但我知道使用我的代码的其他应用程序要快得多。

于 2013-07-14T02:17:37.910 回答