gpt4 book ai didi

python - 带有关键字参数的 PyObject_CallMethod

转载 作者:太空狗 更新时间:2023-10-29 21:26:55 25 4
gpt4 key购买 nike

我正在尝试在我的 C 应用程序中嵌入一个 Python (2.7) 库,并且我正在使用 Python/C API 从 C 调用 Python 代码。我需要调用一个采用关键字参数的 Python 方法。从语义上讲,我正在尝试在 Python 中实现与以下行等效的内容:

myobject.dosomething('blahdy blah', somearg=True)

通过阅读 documentation ,我已经设法做到了以下几点,但这并没有传递关键字参数:

PyObject_CallMethod(myobject, "dosomething", "s", "blahdy blah");

我对 Python 不是很熟悉,我有点卡在这一点上,因为文档对此并不完全清楚,而且谷歌搜索也没有找到太多有用的信息。如果有任何帮助,我将不胜感激。

最佳答案

Tamas 的回答可以完成工作,但也会泄漏内存。为避免泄漏,请使用

PyObject *args = Py_BuildValue("(s)", "blahdy blah");    
PyObject *keywords = PyDict_New();
PyDict_SetItemString(keywords, "somearg", Py_True);
PyObject *myobject_method = PyObject_GetAttrString(myobject, "do something");

PyObject *result = PyObject_Call(myobject_method, args, keywords);
Py_DECREF(args);
Py_DECREF(keywords);
Py_DECREF(myobject_method);

// Do something with the result

Py_DECREF(result);

当然,如果 Python 代码中有任何错误或异常,一些 PyObjects 将为 NULL,您的程序可能会崩溃。检查 NULL 结果和/或使用 Py_DECREFX() 可以帮助您避免这种情况。

关于python - 带有关键字参数的 PyObject_CallMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com