使用Python C API,如何使用可选参数调用函数?
例如,假设有一个函数add_module.py
的Python模块add
如下:
def add(a=0, b=0):
return a + b
add(1, 2)
对应
PyObject *add_module = PyImport_ImportModule("add_module");
PyObject *result = PyObject_CallMethod(add_module, "add", "ii", 1, 2);
如何使用Python API调用类似add(b=5)
的内容?
谢谢!
答案 0 :(得分:5)
使用关键字参数进行调用并非直截了当,而且您需要执行PyObject_Call
,这需要3个参数:
PyObject_Call
的第一个参数是方法对象PyObject_Call
的第二个参数是* args 因此我们得到了
PyObject *function = PyObject_GetAttrString(add_module, "add");
PyObject *args = PyTuple_New(0);
PyObject *kwargs = Py_BuildValue("{s:i}", "b", 5)
result = PyObject_Call(function, args, kwargs);
Py_DECREF(kwargs);
Py_DECREF(args);
Py_DECREF(function);
除了你必须 NULL - 检查4个第一个函数的返回值(为简洁起见省略)。