最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解

 更新時(shí)間:2017年04月20日 16:13:16   作者:yangzifb  
c++調(diào)用Python首先安裝Python,本文以win7為例,給大家詳細(xì)介紹C++調(diào)用Python基礎(chǔ)功能,需要的朋友參考下吧

c++調(diào)用Python首先安裝Python,以win7為例,Python路徑為:c:\Python35\,通過(guò)mingw編譯c++代碼。

編寫makefile文件,首先要添加包含路徑:

inc_path += c:/Python35/include

然后添加鏈接參數(shù):

ld_flag += c:/Python35/libs/libpython35.a

在源文件中添加頭文件引用:

#include "Python.h"

Python解釋器需要進(jìn)行初始化,完成任務(wù)后需要終止:

void start()
{
  int r=Py_IsInitialized(); //1為已經(jīng)初始化了
  if (r==0)
  {
    //Py_SetPythonHome(L"C:\\Python35");
    Py_Initialize(); //初始化
    p_main_Module =PyImport_ImportModule("__main__");
    if (!p_main_Module)
    {
      throw "";
    }
  }
}
void end()
{
  Py_Finalize(); //清理
}

程序部署時(shí)可以將c:\Python35\lib目錄復(fù)制到執(zhí)行程序路徑下,或者通過(guò)Py_SetPythonHome(L"C:\\Python35");設(shè)置Python的安裝目錄。

C++調(diào)用Python的基本需求:

1、運(yùn)行Python指令

PyRun_SimpleString("print(os.getcwd(),a)");
pyext.eval(R"(a+='qwer')");

2、加載Python模塊

PyObject * pModule =PyImport_ImportModule("tp"); //test:Python文件名,若腳本有錯(cuò)則返回空
PyRun_SimpleString("import os");

3、給Python的變量賦值

對(duì)于數(shù)值,使用Py_BuildValue:

Py_BuildValue("") None
Py_BuildValue("i", 123) 123
Py_BuildValue("iii", 123, 456, 789) (123, 456, 789)
Py_BuildValue("s", "hello") 'hello'
Py_BuildValue("ss", "hello", "world") ('hello', 'world')
Py_BuildValue("s#", "hello", 4) 'hell'
Py_BuildValue("()") ()
Py_BuildValue("(i)", 123) (123,)  
Py_BuildValue("(ii)", 123, 456) (123, 456)
Py_BuildValue("(i,i)", 123, 456) (123, 456)
Py_BuildValue("[i,i]", 123, 456) [123, 456]
Py_BuildValue("{s:i,s:i}", "abc", 123, "def", 456) {'abc': 123, 'def': 456}

對(duì)于其他數(shù)據(jù)結(jié)構(gòu),使用相應(yīng)的函數(shù)設(shè)置,例如:

PyObject *pArgs = PyTuple_New(1);
PyObject *pDict = PyDict_New();  //創(chuàng)建字典類型變量 
PyDict_SetItemString(pDict, "Name", Py_BuildValue("s", "WangYao")); //往字典類型變量中填充數(shù)據(jù) 
PyDict_SetItemString(pDict, "Age", Py_BuildValue("i", 25)); //往字典類型變量中填充數(shù)據(jù) 
PyTuple_SetItem(pArgs, 0, pDict);//0---序號(hào) 將字典類型變量添加到參數(shù)元組中 

構(gòu)造好對(duì)象以后,通過(guò)PyObject_SetAttrString來(lái)設(shè)置進(jìn)入Python中:

PyObject *ps=PyUnicode_DecodeUTF8(val,strlen(val),"ignore"); //構(gòu)造了一個(gè)對(duì)象
PyObject_SetAttrString(p_main_Module,key,ps); //設(shè)置

4、獲取Python變量的值

首先取得變量的指針,然后通過(guò)PyArg_Parse解析

pModule =PyImport_ImportModule("__main__");
pReturn = PyObject_GetAttrString(pModule, "a"); //可以獲得全局變量
int size = PyDict_Size(pReturn); 
PyObject *pNewAge = PyDict_GetItemString(pReturn, "Age"); 
int newAge;
PyArg_Parse(pNewAge, "i", &newAge); 

對(duì)于元組的解析:

int ok;
ok = PyArg_ParseTuple(args, "s", &s); //Python call: f('whoops!')
ok = PyArg_ParseTuple(args, "lls", &k, &l, &s);//Python call: f(1, 2,'three')
ok = PyArg_ParseTuple(args, "(ii)s#", &i, &j, &s, &size);//Python call: f((1, 2), 'three')
ok = PyArg_ParseTuple(args, "s|si", &file, &mode, &bufsize);//Python calls:
//f('spam')
//f('spam', 'w')
//f('spam', 'wb', 100000)

5、調(diào)用Python函數(shù)

PyObject * pfun=PyObject_GetAttrString(pModule, "testdict"); //testdict:Python文件中的函數(shù)名
PyObject *pReturn = PyEval_CallObject(pfun, pArgs); //調(diào)用函數(shù)

 6、設(shè)置函數(shù)讓Python調(diào)用

首先定義c函數(shù),然后聲明方法列表,然后聲明模塊,然后增加這個(gè)模塊,最后調(diào)用

static int numargs=1890;
static PyObject* emb_numargs(PyObject *self, PyObject *args) //C函數(shù)
{
  if(!PyArg_ParseTuple(args, ":numargs"))
    return NULL;
  return PyLong_FromLong(numargs);
}
static PyMethodDef EmbMethods[] = { //方法列表
  {"numargs", emb_numargs, METH_VARARGS,
   "Return the number of arguments received by the process."},
  {NULL, NULL, 0, NULL}
};
static PyModuleDef EmbModule = { //模塊聲明
  PyModuleDef_HEAD_INIT, "emb", NULL, -1, EmbMethods,
  NULL, NULL, NULL, NULL
};
static PyObject* PyInit_emb(void) //模塊初始化函數(shù)
{
  return PyModule_Create(&EmbModule);
}
//增加模塊:
PyImport_AppendInittab("emb", &PyInit_emb); //增加一個(gè)模塊

Python部分代碼:

import emb
print("Number of arguments", emb.numargs())

以上所述是小編給大家介紹的C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C++踩坑實(shí)戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)

    C++踩坑實(shí)戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)

    不論是構(gòu)造函數(shù),還是析構(gòu)函數(shù),都是C++、C#語(yǔ)言相對(duì)于其他語(yǔ)言而言特殊的地方,它是為了方便類中對(duì)象的初始化,這篇文章主要給大家介紹了關(guān)于C++踩坑實(shí)戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++?opencv圖像平滑濾波器使用示例

    C++?opencv圖像平滑濾波器使用示例

    這篇文章主要為大家介紹了C++?opencv數(shù)字圖像處理圖像平滑濾波器的使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • matlab遺傳算法求解車間調(diào)度問(wèn)題分析及實(shí)現(xiàn)源碼

    matlab遺傳算法求解車間調(diào)度問(wèn)題分析及實(shí)現(xiàn)源碼

    這篇文章主要為大家介紹了matlab遺傳算法求解車間調(diào)度問(wèn)題解析,文中附含詳細(xì)實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C語(yǔ)言中qsort函數(shù)的用法實(shí)例詳解

    C語(yǔ)言中qsort函數(shù)的用法實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言中qsort函數(shù)的用法實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 一文搞懂C++中的四種強(qiáng)制類型轉(zhuǎn)換

    一文搞懂C++中的四種強(qiáng)制類型轉(zhuǎn)換

    很多朋友向小編了解C語(yǔ)言中怎么進(jìn)行強(qiáng)制類型轉(zhuǎn)換呢?在這小編告訴大家強(qiáng)制類型轉(zhuǎn)換可以分為兩種,一種是隱式類型轉(zhuǎn)換一種是顯示類型轉(zhuǎn)換,下面通過(guò)示例代碼給大家介紹下,需要的朋友參考下吧
    2021-07-07
  • C語(yǔ)言小項(xiàng)目計(jì)時(shí)器的實(shí)現(xiàn)思路(倒計(jì)時(shí)+報(bào)警提示)

    C語(yǔ)言小項(xiàng)目計(jì)時(shí)器的實(shí)現(xiàn)思路(倒計(jì)時(shí)+報(bào)警提示)

    這篇文章主要介紹了C語(yǔ)言小項(xiàng)目計(jì)時(shí)器(倒計(jì)時(shí)+報(bào)警提示)的實(shí)現(xiàn)思路,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C++?左值引用與一級(jí)指針示例詳解

    C++?左值引用與一級(jí)指針示例詳解

    這篇文章主要介紹了C++?左值引用與一級(jí)指針,本文給大家介紹了C++?(左值)引用和指針簡(jiǎn)介,結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • C語(yǔ)言各種符號(hào)的使用介紹上篇

    C語(yǔ)言各種符號(hào)的使用介紹上篇

    C 語(yǔ)言的基本符號(hào)就有 20 多個(gè),每個(gè)符號(hào)可能同時(shí)具有多重含義,而且這些符號(hào)之間相互組合又使得 C 語(yǔ)言中的符號(hào)變得更加復(fù)雜起來(lái)
    2022-08-08
  • C語(yǔ)言面試常見考點(diǎn)排序總結(jié)

    C語(yǔ)言面試常見考點(diǎn)排序總結(jié)

    深處開發(fā)崗,其實(shí)排序也是繞不開的環(huán)節(jié),其中冒泡排序,選擇排序,插入排序,歸并排序,快速排序,堆排序也是我在秋招以來(lái)頻繁問(wèn)到的技術(shù)點(diǎn),今天我們來(lái)重點(diǎn)聊聊排序
    2021-11-11
  • c語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的易語(yǔ)言

    c語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的易語(yǔ)言

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于c語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的易語(yǔ)言的相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。
    2018-12-12

最新評(píng)論

德州市| 株洲县| 托克逊县| 沧源| 梅州市| 普陀区| 德昌县| 内丘县| 濮阳县| 农安县| 金川县| 宣威市| 徐闻县| 登封市| 张家界市| 克什克腾旗| 阳江市| 静海县| 道真| 蒲江县| 东阿县| 定结县| 缙云县| 甘南县| 富蕴县| 交城县| 湖州市| 阳东县| 宣恩县| 得荣县| 麦盖提县| 安塞县| 临沧市| 浮梁县| 金华市| 嘉善县| 于田县| 德格县| 湖州市| 大英县| 泉州市|