使用 Python C API,如何调用带有可选参数的函数?
例如,假设有一个 Python 模块 add_module.py
,其函数 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)
的东西?
谢谢!
最佳答案
使用关键字参数调用在 C 中并不是那么简单,您需要执行 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);
除了您必须对前 4 个函数的返回值进行 NULL 检查(为简洁起见省略)。
关于python - 使用 PyObject_CallMethod 调用带有可选参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998817/