<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-208  評(píng)論-469  文章-30  trackbacks-0



    代碼如下,分別演示直接執(zhí)行python語句、無返回?zé)o參數(shù)函數(shù)調(diào)用、返回單參數(shù)函數(shù)調(diào)用。返回多參數(shù)函數(shù)調(diào)用:

    #include <Python.h>
    #include <iostream>
    using namespace std;

    //執(zhí)行python命令
    void ExecPythonCommand()
    {
     //直接執(zhí)行
     PyRun_SimpleString("from time import time,ctime\n"
      "print 'Today is',ctime(time())\n");
    }

    //調(diào)用無參數(shù)函數(shù)
    void InvokeNoParm()
    {
     PyObject* pMod = NULL;
     PyObject* pFunc = NULL;
     //導(dǎo)入模塊
     pMod = PyImport_ImportModule("Life");
     if(pMod)
     {
      //獲取函數(shù)地址
      pFunc = PyObject_GetAttrString(pMod, "a");
      if(pFunc)
      {
       //函數(shù)調(diào)用
       PyEval_CallObject(pFunc, NULL);
      }
      else
      {
       cout << "cannot find function a" << endl;
      }
     }
     else
     {
      cout << "cannot find Life.py" << endl;
     }
    }

    //調(diào)用一參數(shù)函數(shù)
    void InvokeWith1Parm()
    {
     PyObject* pMod = NULL;
     PyObject* pFunc = NULL;
     PyObject* pParm = NULL;
     PyObject* pRetVal = NULL;
     int   iRetVal = 0;
     //導(dǎo)入模塊
     pMod = PyImport_ImportModule("FuncDef");
     if(pMod)
     {
      pFunc = PyObject_GetAttrString(pMod, "square");
      if(pFunc)
      {
       //創(chuàng)建參數(shù)
       pParm = Py_BuildValue("(i)", 5);
       //函數(shù)調(diào)用
       pRetVal = PyEval_CallObject(pFunc, pParm);
       //解析返回值
       PyArg_Parse(pRetVal, "i", &iRetVal);
       cout << "square 5 is: " << iRetVal << endl;
      }
      else
      {
       cout << "cannot find function square" << endl;
      }
     }
     else
     {
      cout << "cannot find FuncDef.py" << endl;
     }
    }

    //調(diào)用多參數(shù)函數(shù)
    void InvokeWith2Parm()
    {
     PyObject* pMod = NULL;
     PyObject* pFunc = NULL;
     PyObject* pParm = NULL;
     PyObject* pRetVal = NULL;
     int   iRetVal = 0;
     //導(dǎo)入模塊
     pMod = PyImport_ImportModule("add");
     if(pMod)
     {
      pFunc = PyObject_GetAttrString(pMod, "add");
      if(pFunc)
      {
       //創(chuàng)建兩個(gè)參數(shù)
       pParm = PyTuple_New(2);
       //為參數(shù)賦值
       PyTuple_SetItem(pParm, 0, Py_BuildValue("i",2000));
       PyTuple_SetItem(pParm, 1, Py_BuildValue("i",3000));
       //函數(shù)調(diào)用
       pRetVal = PyEval_CallObject(pFunc, pParm);
       //解析返回值
       PyArg_Parse(pRetVal, "i", &iRetVal);
       cout << "2000 + 3000 = " << iRetVal << endl;
      }
      else
      {
       cout << "cannot find function square" << endl;
      }
     }
     else
     {
      cout << "cannot find add.py" << endl;
     }
    }

    int main(int argc, char* argv[])
    {
     Py_Initialize(); //python 解釋器的初始化
     
     ExecPythonCommand();
     InvokeNoParm();
     InvokeWith1Parm();
     InvokeWith2Parm();

     Py_Finalize();  // 垃圾回收、清除導(dǎo)入庫
     return 0;
    }


    習(xí)慣C++的內(nèi)存分配釋放,突然間不用釋放,感覺很蹊蹺,上網(wǎng)查發(fā)現(xiàn)也沒有釋放函數(shù)。如果真這樣的話,是很可怕的,因?yàn)闊o法自己管理內(nèi)存,但是我相信編譯器作者的垃圾回收機(jī)制,所以O(shè)K,不管!!

    代碼下載

    posted on 2006-01-17 20:04 EricWong 閱讀(667) 評(píng)論(1)  編輯  收藏 所屬分類: C&C++

    評(píng)論:
    # re: C++之python函數(shù)調(diào)用 2007-09-04 17:39 | 金慶
    應(yīng)該調(diào)用Py_DECREF()釋放內(nèi)存,
    例如:
    Py_DECREF(pMod);

    不然Python不會(huì)進(jìn)行垃圾回收,因?yàn)樗吹綄?duì)象仍被引用。  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 毛片a级毛片免费观看品善网| 好久久免费视频高清| 无码视频免费一区二三区| 亚洲精品国产福利片| 亚洲成人免费网址| 国产91在线|亚洲| 亚洲综合无码一区二区| 一区二区免费视频| 亚洲国产av美女网站| 91在线视频免费看| 亚洲国产精品18久久久久久| 四虎影视精品永久免费| 狼人大香伊蕉国产WWW亚洲| 五月天婷亚洲天综合网精品偷| 免费无遮挡无遮羞在线看| 国产成人亚洲精品狼色在线| 免费的全黄一级录像带| 亚洲午夜精品一区二区公牛电影院 | 亚洲人成自拍网站在线观看| 国产精品麻豆免费版| 一区二区三区免费电影| 亚洲国产人成网站在线电影动漫| 国产精品免费精品自在线观看| 亚洲欧美日韩中文字幕在线一区| 亚洲国产高清在线一区二区三区| 三级网站在线免费观看| 亚洲人成黄网在线观看| 又黄又爽一线毛片免费观看 | 亚洲日韩国产欧美一区二区三区| 日韩亚洲精品福利| 日韩免费的视频在线观看香蕉| 亚洲卡一卡二卡乱码新区| 免费少妇a级毛片| 久99久精品免费视频热77| 亚洲一区二区无码偷拍| 亚洲日本va中文字幕久久| 中国在线观看免费国语版| 一级特黄a大片免费| 亚洲不卡中文字幕| 国产av无码专区亚洲av果冻传媒 | 国产AⅤ无码专区亚洲AV|