2012-04-11 6 views
1

Wenn ich die folgende Funktion habe und das optionale Argument myobj nicht übergeben wird, bleibt myobjNULL oder ist es auf Py_None eingestellt?PyArg_ParseTuple Standardargument

static PyObject * myfunc(PyObject * self, PyObject * args) { 
    PyObject * myobj = NULL; 
    if (!PyArg_ParseTuple(args, "|O", &myobj)) { 
     return NULL; 
    } 
    // ... 
} 

Nach Parsing arguments and building values,

| Zeigt an, dass die übrigen Argumente in der Python Argumentliste sind optional. Die C-Variablen, die optionalen Argumenten entsprechen, sollten auf ihren Standardwert initialisiert werden - wenn kein optionales Argument angegeben wird, berührt PyArg_ParseTuple() nicht den Inhalt der entsprechenden C-Variablen.

Gilt das für PyObject * s? Es ist offensichtlich ein Zeiger, der in C existiert, also könnte man sagen, es ist eine C-Variable, aber es ist ein Zeiger auf ein Python-Objekt, also könnte man auch sagen, dass es nicht als C-Variable zählt.

Antwort

3

Es bleibt NULL. Und natürlich ist ein Zeiger auf eine Struktur ein C-Objekt.