将包含 None
值的元组从 C 扩展返回到 Python 的合适方法是什么?我知道可以使用
None
值
result = Py_BuildValue("");
并且可以使用类似的东西创建元组
result = Py_BuildValue("(ii)", 123, 456);
但我没有看到一种方法可以将其组合起来,例如,包含一个适当的整数和一个 None
值的元组。
最佳答案
在 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()
不会为你做。
关于python - 如何从 C API 返回包含 None 值的元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16400600/