Аргумент по умолчанию PyArg_ParseTuple

Если у меня есть следующая функция и необязательный аргумент 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.


person All Workers Are Essential    schedule 11.04.2012    source источник


Ответы (1)


Он останется NULL. И, конечно же, указатель на структуру — это объект C.

person ThiefMaster    schedule 11.04.2012