On Dec 17, 11:14 am, Joachim Dahl <dahl.joac...@gmail.com> wrote: > In the Ubuntu 9.10 version of Python 3.1 (using your patch), there's a > related bug: > > >>> foo(b='b') > > will set the value of a in the extension module to zero, thus clearing > whatever > default value it may have had. In other words, the optional character > arguments > that are skipped seem to be nulled by PyArg_ParseTupleAndKeywords().
The following code seems to work fine for me: static PyObject* foo(PyObject *self, PyObject *args, PyObject *kwrds) { int a=65, b=66; char *kwlist[] = {"a", "b", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwrds, "|CC", kwlist, &a, &b)) return NULL; return Py_BuildValue("(CC)", a, b); } The default values seem to remain as 'A' and 'B'. >>> foo() ('A', 'B') >>> foo(b='b') ('A', 'b') >>> foo() ('A', 'B') >>> foo('a') ('a', 'B') >>> foo('a', b='b') ('a', 'b') >>> foo() ('A', 'B') >>> casevh -- http://mail.python.org/mailman/listinfo/python-list