如果我有以下函数,并且可选参数
根据解析参数和构建值,管道符号(
myobj
未传递,那么myobj
是否保持为NULL
,还是设置为Py_None
?static PyObject * myfunc(PyObject * self, PyObject * args) {
PyObject * myobj = NULL;
if (!PyArg_ParseTuple(args, "|O", &myobj)) {
return NULL;
}
// ...
}
根据解析参数和构建值,管道符号(
|
)表示Python参数列表中剩余的参数是可选的。对于可选参数对应的C变量应该初始化为它们的默认值。当没有指定可选参数时,PyArg_ParseTuple()不会影响相应C变量的内容。那么这是否适用于PyObject *
?显然,它是在C中存在的指针,因此可以说它是C变量,但它是一个指向Python对象的指针,因此也可以说它不算作C变量。