将包含None
值的元组从C扩展名返回到Python的适当方法是什么?我知道可以使用
None
值
result = Py_BuildValue("");
并且可以使用类似
之类的东西创建元组result = Py_BuildValue("(ii)", 123, 456);
但我没有看到一种方法来组合它,例如,获取包含正确整数和None
值的元组。
答案 0 :(得分:4)
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, 0, Py_None);
return tuple;
...然后你必须增加引用计数,因为PyTuple_SetItem()
不适合你。
答案 1 :(得分:3)
result = Py_BuildValue("(isi)", 123, NULL, 456);