PyArg_ParseTupleAndKeywords() は、以下のように宣言されています:
int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict, char *format, char *kwlist[], ...);
arg と format パラメタはPyArg_ParseTuple() のものと同じです。kwdict パラメタはキーワード引数の入った 辞書で、 Python ランタイムシステムから第三パラメタとして受け取ります。 kwlist パラメタは各パラメタを識別するための文字列からなる、 NULL終端されたリストです; 各パラメタ名は format 中の 型情報に対して左から右の順に照合されます。
成功するとPyArg_ParseTupleAndKeywords() は真を返し、 それ以外の場合には適切な例外を送出して偽を返します。
注意: キーワード引数を使っている場合、タプルは入れ子にして使えません! kwlist 内に存在しないキーワードパラメタが渡された場合、 TypeError の送出を引き起こします。
以下にキーワードを使ったモジュール例を示します。これは Geoff Philbrick (philbrick@hks.com) によるプログラム例を もとにしています:
#include "Python.h" static PyObject * keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds) { int voltage; char *state = "a stiff"; char *action = "voom"; char *type = "Norwegian Blue"; static char *kwlist[] = {"voltage", "state", "action", "type", NULL}; if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|sss", kwlist, &voltage, &state, &action, &type)) return NULL; printf("-- This parrot wouldn't %s if you put %i Volts through it.\n", action, voltage); printf("-- Lovely plumage, the %s -- It's %s!\n", type, state); Py_INCREF(Py_None); return Py_None; } static PyMethodDef keywdarg_methods[] = { /* PyCFunction の値は PyObject* パラメタを二つだけしか引数に * 取らないが、 keywordarg_parrot() は三つとるので、キャストが * 必要。 */ {"parrot", (PyCFunction)keywdarg_parrot, METH_VARARGS | METH_KEYWORDS, "Print a lovely skit to standard output."}, {NULL, NULL, 0, NULL} /* センティネル値 */ };
void initkeywdarg(void) { /* モジュールを作成して関数を追加する */ Py_InitModule("keywdarg", keywdarg_methods); }
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。