5

如果我有以下函数并且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 *s 吗?它显然是一个存在于 C 中的指针,因此可以说它是 C 变量,但它是指向 python 对象的指针,因此也可以说它不算作 C 变量。

4

1 回答 1

5

它将保持为 NULL。当然,指向结构的指针是 C 对象。

于 2012-04-11T19:34:19.303 回答