char *kwlist[] = {"a", "b", NULL};<br>   if (!PyArg_ParseTupleAndKeywords(args, kwrds, "|CC", kwlist, &a,<br>&b))<div>I am yet to understand what pointer kwlist[] does and why it is needed?</div>
<div><br></div><div>Regards,</div><div>Emeka<br><br><div class="gmail_quote">On Fri, Dec 18, 2009 at 8:17 AM, casevh <span dir="ltr"><<a href="mailto:casevh@gmail.com">casevh@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Dec 17, 11:14 am, Joachim Dahl <<a href="mailto:dahl.joac...@gmail.com">dahl.joac...@gmail.com</a>> wrote:<br>
> In the Ubuntu 9.10 version of Python 3.1 (using your patch), there's a<br>
> related bug:<br>
><br>
> >>> foo(b='b')<br>
><br>
> will set the value of a in the extension module to zero, thus clearing<br>
> whatever<br>
> default value it may have had.  In other words, the optional character<br>
> arguments<br>
> that are skipped seem to be nulled by PyArg_ParseTupleAndKeywords().<br>
<br>
</div>The following code seems to work fine for me:<br>
<div class="im"><br>
static PyObject* foo(PyObject *self, PyObject *args, PyObject *kwrds)<br>
{<br>
</div>    int a=65, b=66;<br>
<div class="im">    char *kwlist[] = {"a", "b", NULL};<br>
    if (!PyArg_ParseTupleAndKeywords(args, kwrds, "|CC", kwlist, &a,<br>
&b))<br>
        return NULL;<br>
</div>    return Py_BuildValue("(CC)", a, b);<br>
}<br>
<br>
The default values seem to remain as 'A' and 'B'.<br>
<br>
>>> foo()<br>
('A', 'B')<br>
>>> foo(b='b')<br>
('A', 'b')<br>
>>> foo()<br>
('A', 'B')<br>
>>> foo('a')<br>
('a', 'B')<br>
>>> foo('a', b='b')<br>
('a', 'b')<br>
>>> foo()<br>
('A', 'B')<br>
>>><br>
<font color="#888888"><br>
casevh<br>
</font><div><div></div><div class="h5">--<br>
<a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
</div></div></blockquote></div><br></div>