gpt4 book ai didi

python - PyInt_FromLong 和 Py_BuildValue 之间的区别

转载 作者:行者123 更新时间:2023-11-28 22:54:48 25 4
gpt4 key购买 nike

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

例如,PyDict_SetItemPyDict_SetItemString 是相同的,但后者专门用于 C 字符串作为键。对于 PyList_SetItemPyList_SET_ITEM,第二个没有错误检查,也不减少现有项目 (explained here)。

但是当始终存在 Py_BuildValue 时,为什么要进行像 PyInt_FromLong 这样的特殊转换?两者都返回对 Python 对象的新引用,并且看起来做的事情完全相同。同样的问题适用于 PyInt_FromSsize_tPyTuple_Pack 等函数(所有这些都与 Py_BuildValue 相比,当然具有适当的格式字符串)。

什么时候应该使用一个而不是另一个?

最佳答案

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

是否值得是另一个问题。我永远无法收回我为获得最佳性能所花费的时间,但我知道使用我的代码的其他应用程序明显更快。

关于python - PyInt_FromLong 和 Py_BuildValue 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17635782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com