C 呼叫python的乙個簡單例項

2021-09-25 13:03:47 字數 2190 閱讀 2627

在c++中使用python的時候,首先需要配置python的環境。

在此,我就不說明如何配置環境了,網路一搜都是配置方法。以下,我介紹下我在c++中是如何呼叫python的方法。

僅僅作為參考,有問題咱們可以一起交流。

第一步:python中的簡單應用函式

test.py

defadditionfc

(a , b):

c = a + b

return c

defsubtractionfc

(a , b):

c = a - b

return c

這個python中只包含了兩個簡單的例子。乙個是加法,乙個是減法。

現在需要用c++語言呼叫python中的兩個內容。

第一步:配置好python在c++中的環境。

在此省略。。。

第二步:新增python的宣告

#include

"python.h"

第二步:初始化python介面

py_initialize();

第三步:初始化使用的變數

pyobject * pmodule =

null;

pyobject * pfunc =

null;

pyobject *pname =

null;

這部分可以放到後面寫,寫到這裡完全是因為個人習慣的原因。

第四步:初始化python系統檔案路徑,保證可以訪問到 .py檔案 

pyrun_******string(

「import sys」);

pyrun_******string(

第五步:呼叫python檔名。

當前的測試python檔名是test.py

pmodule = pyimport_importmodule(「test」);

在使用這個函式的時候,只需要寫檔案的名稱就可以了。不用寫字尾。

第六步:呼叫函式

在此,我僅呼叫乙個作為參考,另乙個呼叫方法是一樣的。

pfunc = pyobject_getattrstring(pmodule, 「additionfc」);

第七步:給python傳引數

pyobject *pargs = pytuple_new(2);//函式呼叫的引數傳遞均是以元組的形式打包的,2表示引數個數

這句**的意思是:我要給python這個函式傳入兩個引數。

如果additionfc中只有乙個引數時,寫1就可以了。這裡只介紹函式必須有引數存在的情況,沒有引數的情況會在後面章節中介紹的。

pytuple_setitem(pargs, 0, py_buildvalue(「i」, 2));

解釋:

0:表示序號。第乙個引數

i:表示傳入的引數型別時int型別

pytuple_setitem(pargs, 1, py_buildvalue(「i」, 4));

1:表示序號。第二個引數

第八步:使用c++的python介面呼叫該函式

pyobject *preturn = pyeval_callobject(pfunc, pargs);

第九步:接收python計算好的返回值

int nresult ;

pyarg_parse(preturn,

「i」, &nresult);

//i表示轉換成int型變數

在這裡,最需要注意的是:pyarg_parse的最後乙個引數,必須加上「&」符號。

第十步:結束python介面初始化

py_finalize();

以上就是乙個簡單的c++中呼叫python的例子。

C 定義乙個簡單的類及其呼叫

根據下列要求,編寫完整程式。設計乙個類,用於對10元整型陣列進行管理。要求 1 在定義物件時,能夠為陣列元素清0.2 定義成員函式input,用於為陣列元素輸入資料。3 定義成員函式disp,用於顯示陣列的每個元素值。4 定義成員函式max,用於找出陣列元素的最大值及其個數,其中最大值由函式值返回,...

用乙個簡單示例演示在python中呼叫C及C

2016年11月20日 05 15,by 舒彩光 只要會c語言程式設計就很容易為python新增新的內建模組。可以通的c的擴充套件模組做兩種事,一是實現新的內建物件型別。另乙個是呼叫c的庫函式與系統呼叫。為了支援c擴充套件,python api定義了一系列函式,變數及巨集。只要在c或c 裡引入 py...

乙個簡單的hello world交叉編譯實驗

交叉編譯,簡單地說,就是在乙個平台上生成另乙個平台上的可執行 下面就做乙個簡單的hello world實驗來完成這一過程。本實驗涉及兩台主機。a主機 安裝交叉編譯環境,並用來編譯原始檔。在本次實驗中使用的是虛擬機器ubuntu系統環境 b主機 arm架構平台開發板,用來執行a主機編譯好的可執行檔案,...