5

次の関数があり、オプションの引数myobjが渡されない場合、myobj残りますNULLか、またはに設定されPy_Noneますか?

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

Parsing arguments と building valuesによると、

|Python 引数リストの残りの引数がオプションであることを示します。オプションの引数に対応する C 変数は、デフォルト値に初期化する必要があります — オプションの引数が指定されていない場合、 PyArg_ParseTuple() は対応する C 変数の内容に触れません。

これはsに当てはまりますPyObject *か?これは明らかにCに存在するポインタであるため、C変数であると言えますが、Pythonオブジェクトへのポインタであるため、C変数としてカウントされないと言うこともできます.

4

1 に答える 1

5

NULL のままになります。もちろん、構造体へのポインタは C オブジェクトです。

于 2012-04-11T19:34:19.303 に答える