加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:44:39 所属栏目:百科 来源:网络整理
导读:将包含None值的元组从C扩展名返回到 Python的适当方法是什么?我知道可以使用创建单个None值 result = Py_BuildValue(""); 并且可以使用类似的东西创建元组 result = Py_BuildValue("(ii)",123,456); 但我没有看到一种方法来组合它,例如,一个元组包含一个正
将包含None值的元组从C扩展名返回到 Python的适当方法是什么?我知道可以使用创建单个None值

result = Py_BuildValue("");

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

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

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

解决方法

在Python中只有一个None对象,你总是可以在C中将其称为 Py_None.

代码…

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()不会为你做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读