<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div class="im"><div style="color: rgb(80, 0, 80); ">static PyObject* foo(PyObject *self, PyObject *args, PyObject *kwrds)<br>
{<br></div>   int a=65, b=66;<br><div style="color: rgb(80, 0, 80); ">   char *kwlist[] = {"a", "b", NULL};</div></div><div style="color: rgb(80, 0, 80); "><span style="background-color: rgb(51, 255, 51); ">I am yet to understand what kwlist pointer  does and why it is needed?</span></div>
<div class="im"><div style="color: rgb(80, 0, 80); "><br>   if (!PyArg_ParseTupleAndKeywords(args, kwrds, "|CC", kwlist, &a,<br>&b))<br>       return NULL;<br></div>   return Py_BuildValue("(CC)", a, b);<br>
}</div></span><div class="gmail_quote"><br></div><div class="gmail_quote">Regards,</div><div class="gmail_quote">Emeka<br><br><br><span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse"><div class="im">
The following code seems to work fine for me:<br><div style="color:rgb(80, 0, 80)"><br>static PyObject* foo(PyObject *self, PyObject *args, PyObject *kwrds)<br>
{<br></div>   int a=65, b=66;<br><div style="color:rgb(80, 0, 80)">   char *kwlist[] = {"a", "b", NULL};</div></div><div style="color:rgb(80, 0, 80)"><span style="background-color:rgb(51, 255, 51)">I am yet to understand what kwlist pointer  does and why it is needed?</span></div>
<div class="im">
<div style="color:rgb(80, 0, 80)"><br>   if (!PyArg_ParseTupleAndKeywords(args, kwrds, "|CC", kwlist, &a,<br>&b))<br>       return NULL;<br></div>   return Py_BuildValue("(CC)", a, b);<br>
}</div></span><div><font face="arial, sans-serif"><span style="border-collapse:collapse"><br></span></font></div><div><span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse">Regards,</span></div>

<div><span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse">Emeka<div class="im"><br><br>The default values seem to remain as 'A' and 'B'</div></span><div><div></div><div class="h5">
<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" target="_blank">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>On Dec 17, 11:14 am, Joachim Dahl <<a href="mailto:dahl.joac...@gmail.com" target="_blank">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><br>
static PyObject* foo(PyObject *self, PyObject *args, PyObject *kwrds)<br>
{<br>
</div>    int a=65, b=66;<br>
<div>    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>--<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></div></div>
</div><br>