當前位置:編程學習大全網 - 源碼下載 - C++調用時python時,如何傳入數組做為參數

C++調用時python時,如何傳入數組做為參數

題主,妳基本操作沒什麽問題,有幾個小地方要修改壹下,修改如下:

妳的源碼:

PyObject* list = PyList_New(3);

for (size_t i = 0; i < 3; i++)

PyList_Append(list, Py_BuildValue("i", i));

PyEval_CallObject(pFunc, list);

--------------------------------------------------------------------------------------

修改後,應該是這樣

PyObject*?pArgs?=?NULL;

PyObject*?list?=?PyList_New(0);//3改成0

pArgs?=?PyTuple_New(1);?//定義1個參數

for?(size_t?i?=?0;?i?<?3;?i++)

PyList_Append(list,?Py_BuildValue("i",?i));?//這樣才能用Append,

PyTuple_SetItem(pArgs,?0,?list);//將列表賦給參數

PyEval_CallObject(pFunc,?list);//傳入參數,調用函數

註意事項:PyList_New(0)?初始化0的時候,應該用Append初始化

PyList_New(3)?初始化3個時候,應該用SetItem初始化

如果用Append的話,會出現[NULL,?NULL,?NULL]的情況

我在給壹個完整的:

Python :(hello.py) ?

def?TestList(nlist):

print(nlist)

return

壹般參數都是已元組形式傳入的

? Py_Initialize();

PyRun_SimpleString("import?sys");

PyRun_SimpleString("sys.path.append('./')");?

PyObject*?pModule?=NULL;

PyObject*?pList?=?NULL;

PyObject*?pFunc?=?NULL;

PyObject*?pArgs?=?NULL;

pModule?=?PyImport_ImportModule("hello");

pFunc?=?PyObject_GetAttrString(pModule,?"TestList");

pArgs?=?PyTuple_New(1);

pList?=?PyList_New(0);

for?(int?i?=?0;?i?<?3;?i++)

{

PyList_Append(pList,?Py_BuildValue("i",?i));

}

PyTuple_SetItem(pArgs,?0,?pList);

pRet?=?PyEval_CallObject(pFunc,?pArgs);

Py_Finalize();

最後輸出的:[0, 1, 2]

  • 上一篇:微信公眾號怎麽互粉
  • 下一篇:霧、霜、雪是怎麽形成的?
  • copyright 2024編程學習大全網