如何从C API返回包含None值的元组?

如何从C API返回包含None值的元组?,第1张

概述将包含None值的元组从C扩展名返回到 Python的适当方法是什么?我知道可以使用创建单个None值 result = Py_BuildValue(""); 并且可以使用类似的东西创建元组 result = Py_BuildValue("(ii)", 123, 456); 但我没有看到一种方法来组合它,例如,一个元组包含一个正确的整数和一个无值. 在Python中只有一个None对象,你总是可以 将包含None值的元组从C扩展名返回到 Python的适当方法是什么?我知道可以使用创建单个None值

result = Py_BuildValue("");

并且可以使用类似的东西创建元组

result = Py_BuildValue("(ii)",123,456);

但我没有看到一种方法来组合它,例如,一个元组包含一个正确的整数和一个无值.

解决方法 在Python中只有一个None对象,你总是可以在C中将其称为 @L_419_1@.

代码…

result = Py_BuildValue("");

…只是递增Py_None的引用计数并返回其指针,所以它与…相同

Py_INCREF(Py_None);result = Py_None;

如果你只想返回None,那么使用……

Py_INCREF(Py_None);return Py_None;

…或者,从Python 2.4开始,你可以用宏做同样的事情……

Py_RETURN_NONE;

如果你以元组的形式返回它,就像这样……

return Py_BuildValue("(O)",Py_None);

…没有必要增加引用计数 – Py_BuildValue()就是为你做的.

但如果你把它归还像这样的元组……

PyObject* tuple = PyTuple_New(1);Py_INCREF(Py_None);PyTuple_SetItem(tuple,Py_None);return tuple;

…然后你必须增加引用计数,因为PyTuple_SetItem()不会为你做.

总结

以上是内存溢出为你收集整理的如何从C API返回包含None值的元组?全部内容,希望文章能够帮你解决如何从C API返回包含None值的元组?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存