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().