python – 使用PyObject_CallMethod调用带有可选参数的函数

weixin_38054205 2019-09-12 01:39:14
使用Python C API,如何使用可选参数调用函数? 例如,假设有一个带有函数add的Python模块add_module.py,如下所示: 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)之类的东西? 谢谢!
...全文
1890 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38065111 2019-09-12
  • 打赏
  • 举报
回复
用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); 除非必须使用NULL检查4个第一个函数的返回值(为简洁起见,省略).

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧