PyArg_ParseTuple() は、以下のように宣言されています:
int PyArg_ParseTuple(PyObject *arg, char *format, ...);
引数arg は C 関数から Python に渡される引数リストが入った タプルオブジェクトでなければなりません。 format 引数は書式化文字列で、 Python/C API リファレンスマニュアル の ``引数の解釈と値の構築'' で解説されている書法に従わねばなりません。 残りの引数は、それぞれの変数のアドレスで、書式化文字列から 決まる型になっていなければなりません。
PyArg_ParseTuple() は Python 側から与えられた引数が 必要な型になっているか調べるのに対し、PyArg_ParseTuple() は呼び出しの際に渡された C 変数のアドレスが有効な値を持つか調べ られないことに注意してください: ここで間違いを犯すと、コードが クラッシュするかもしれませんし、少なくともでたらめなビットを メモリに上書きしてしまいます。慎重に!
呼び出し側に提供されるオブジェクトへの参照はすべて 借用 参照 (borrowed reference) になります; これらのオブジェクトの参照 カウントをデクリメントしてはなりません!
以下にいくつかの呼び出し例を示します:
int ok; int i, j; long k, l; const char *s; int size; ok = PyArg_ParseTuple(args, ""); /* 引数なし */ /* Python での呼び出し: f() */
ok = PyArg_ParseTuple(args, "s", &s); /* 文字列 */ /* Python での呼び出し例: f('whoops!') */
ok = PyArg_ParseTuple(args, "lls", &k, &l, &s); /* 二つの long と文字列 */ /* Python での呼び出し例: f(1, 2, 'three') */
ok = PyArg_ParseTuple(args, "(ii)s#", &i, &j, &s, &size); /* 二つの int と文字列、文字列のサイズも返す */ /* Python での呼び出し例: f((1, 2), 'three') */
{ const char *file; const char *mode = "r"; int bufsize = 0; ok = PyArg_ParseTuple(args, "s|si", &file, &mode, &bufsize); /* 文字列、オプションとして文字列がもう一つと整数が一つ */ /* Python での呼び出し例: f('spam') f('spam', 'w') f('spam', 'wb', 100000) */ }
{ int left, top, right, bottom, h, v; ok = PyArg_ParseTuple(args, "((ii)(ii))(ii)", &left, &top, &right, &bottom, &h, &v); /* 矩形と点を表現するデータ */ /* Python での呼び出し例: f(((0, 0), (400, 300)), (10, 10)) */ }
{ Py_complex c; ok = PyArg_ParseTuple(args, "D:myfunction", &c); /* 複素数。エラー発生時用に関数名も指定 */ /* Python での呼び出し例: myfunction(1+2j) */ }
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。