<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级免费高清黄色片| 亚洲色偷偷狠狠综合网| 婷婷精品国产亚洲AV麻豆不片 | 久久久久久精品免费免费自慰| 亚洲日韩精品一区二区三区| 中文在线观看免费网站| 久久亚洲国产成人精品无码区| 久久免费国产精品| 亚洲va无码专区国产乱码| 久久国产精品免费观看| 亚洲欧洲日产专区| 永久免费的网站在线观看| 亚洲欧美aⅴ在线资源| 四虎影在线永久免费观看| 一区二区三区免费在线观看| 亚洲精品国产精品乱码视色| 日韩精品无码专区免费播放| 亚洲宅男天堂a在线| 成人五级毛片免费播放| 成人在线免费视频| 亚洲第一AV网站| 野花高清在线观看免费完整版中文 | 亚洲国产精品久久久久秋霞小| 国产精品国产免费无码专区不卡| 免费夜色污私人影院网站电影 | 亚洲视频一区二区在线观看| 国产成人精品免费视| 国产AV无码专区亚洲AV蜜芽| 国产成人毛片亚洲精品| 99久久人妻精品免费二区| 在线综合亚洲欧洲综合网站| 亚洲乱亚洲乱少妇无码| 亚洲视频免费观看| 国产亚洲男人的天堂在线观看 | 最新精品亚洲成a人在线观看| 久久成人免费电影| 亚洲av日韩综合一区久热| 亚洲AV无码码潮喷在线观看| 中文字幕无码播放免费| 成人a毛片免费视频观看| 亚洲色欲或者高潮影院|