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

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

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

    隨筆-208  評論-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)建兩個參數(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 閱讀(681) 評論(1)  編輯  收藏 所屬分類: C&C++

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

    不然Python不會進(jìn)行垃圾回收,因?yàn)樗吹綄ο笕员灰谩?nbsp; 回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲精品无码久久久久秋霞| 四虎免费影院ww4164h| 日本亚洲免费无线码| 国产精品亚洲精品日韩已方| 嫩草影院在线免费观看| 午夜视频在线免费观看| 午夜在线免费视频| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲最大成人网色| 亚洲成a人片77777kkkk| 亚洲精品无码成人片在线观看| 天天操夜夜操免费视频| 在线看片韩国免费人成视频| a级日本高清免费看| 免费无码国产在线观国内自拍中文字幕| 亚洲人成人网毛片在线播放| 噜噜噜亚洲色成人网站∨| 国产亚洲成av人片在线观看| 亚洲日韩VA无码中文字幕| 四虎影视永久免费观看网址 | 成人免费毛片内射美女APP| 无码国产精品一区二区免费vr | 免费欧洲美女牲交视频| 在线观看无码的免费网站| 青草草色A免费观看在线| 曰批全过程免费视频网址| 日本不卡免费新一区二区三区| 狠狠躁狠狠爱免费视频无码| 一级毛片免费在线观看网站| 人成电影网在线观看免费| 免费手机在线看片| 一区二区三区免费在线观看| 国产va免费精品| 中国一级特黄的片子免费| 中文字幕的电影免费网站| 成人一区二区免费视频| 岛国精品一区免费视频在线观看| yellow免费网站| a级毛片毛片免费观看久潮| 大地资源中文在线观看免费版| a级毛片高清免费视频就|