Case, Thanks so much! However, I am still confused. This is what I understood;
foo (a = "a", b = "b") so function , foo, has default values which are "a" and "b". pointer kwlist[] is a way of specifying default values . Regards, Emeka On Fri, Dec 18, 2009 at 3:02 PM, Case Vanhorsen <cas...@gmail.com> wrote: > On Fri, Dec 18, 2009 at 2:26 AM, Emeka <emekami...@gmail.com> wrote: > > char *kwlist[] = {"a", "b", NULL}; > > if (!PyArg_ParseTupleAndKeywords(args, kwrds, "|CC", kwlist, &a, > > &b)) > > I am yet to understand what pointer kwlist[] does and why it is needed? > > Regards, > > Emeka > > foo is designed to accept two arguments that can be specified by > either position or name. kwlist contains the legal keyword names. In > this example, the legal keywords are 'a' and 'b'. That they match the > names of the C variables is just a lucky coincidence. If you want to > change the keyword names to 'foo' and 'bar', you would just use char > *kwlist[]={"foo", "bar", NULL}. > > casevh > > > > On Fri, Dec 18, 2009 at 8:17 AM, casevh <cas...@gmail.com> wrote: > >> > >> 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 > > > > >
-- http://mail.python.org/mailman/listinfo/python-list