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