求Python达人帮我解释一下,谢了

Python中的PyArg_ParseTupleAndKeywords函数如何使用,尤其他的format参数,求教,谢谢

慕虎7371278
浏览 105回答 1
1回答

慕沐林林

当你的函数接受关键字参数,那么m_flags可设置为METH_VARARGS|METH_KEYWORDS,相应的使用PyArg_ParseTupleAndKeywords来进行参数解析。函数 PyArg_ParseTupleAndKeywords() 声明如下:int PyArg_ParseTupleAndKeywords(PyObject* arg, PyObject* kwdict, char* format, char* kwlist[],...);参数arg和format定义同 PyArg_ParseTuple() 。参数 kwdict 是关键字字典,用于接受运行时传来的关键字参数。参数 kwlist 是一个NULL结尾的字符串,定义了可以接受的参数名,并从左到右与format中各个变量对应。如果执行成功 PyArg_ParseTupleAndKeywords() 会返回true,否则返回false并抛出异常。注:嵌套的tuple在使用关键字参数时无法生效,不在kwlist中的关键字参数会导致 TypeError 异常代码#include <Python.h>static PyObject* foo_bar3(PyObject* self, PyObject* args, PyObject* kw) {static char* kwlist[] = {"i", "d", "s",NULL};int iNum = 0;double fNum = 2.0f;char* str = "thing";if (!PyArg_ParseTupleAndKeywords(args,kw,"i|ds",kwlist,&iNum,&fNum,&str)) {printf("ERROR");return NULL;}printf("num is: %d,%f,%s/n",iNum,fNum,str);Py_RETURN_NONE;}static PyMethodDef foo_methods[] = {{"bar3", (PyCFunction)foo_bar3, METH_VARARGS|METH_KEYWORDS, NULL},{NULL,NULL,0,NULL}};PyMODINIT_FUNC initfoo() {Py_InitModule3("foo", foo_methods, "My first extension module.");}相应的在函数表里记录如下:{"foo_bar",(PyCFunction)foo_bar, METH_VARARGS|METH_KEYWORDS,NULL},这样你在python代码中调用时可以传递关键字参数,其中只有i表示的整数是必需的,因此下述调用都是合法的:import foofoo.bar3(1)foo.bar3(1,d=2.0)foo.bar33(i=1,d=2.0)而如果你传递了其他关键参数,则会报TypeError,比如foo.bar3(i=1,dd=3.0,s="fda")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python