Python C扩展:从引擎中提取参数

我想用Python对我的函数进行数学测试。 可以访问Python的典型程序是:

#include  #include  #include  int RunTests() { Py_Initialize(); PyRun_SimpleString("a=5"); PyRun_SimpleString("b='Hello'"); PyRun_SimpleString("c=1+2j"); PyRun_SimpleString("d=[1,3,5,7,9]"); //question here Py_Finalize(); return 0; } 

我的问题是:如何将参数a,b,c,d提取到PyObject

PyRun_SimpleString()__main__模块的上下文中执行代码。 您可以使用PyImport_AddModule()检索对此模块的引用,从此模块获取全局字典并查找变量:

 PyObject *main = PyImport_AddModule("__main__"); PyObject *globals = PyModule_GetDict(main); PyObject *a = PyDict_GetItemString(globals, "a"); 

您可能最好不要使用这种方法,最好创建一个新的globals字典并使用PyRun_String()在该globals字典的上下文中执行代码:

 PyObject *globals = PyDict_New(); PyObject *a = PyRun_String("5", Py_single_input, globals, globals); 

这样,您不需要首先将表达式的结果存储在某个变量中,然后从__main__的全局范围中提取它。 您仍然可以使用变量来存储中间结果,然后可以从上面的globals提取。