在C 中使用python

2021-09-16 13:22:58 字數 1653 閱讀 8960

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

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

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

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

test.py

def additionfc(a , b):

c = a + b

return c

def subtractionfc(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檔案

第五步:呼叫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();

原文: 

pythonc函式 在Python中使用C函式

我已經嘗試過網際網路上提到的所有解決方案,但沒有乙個對我有效。在 我有乙個python 為了加快速度,我希望我的 在c函式中執行繁重的計算。我已經寫了這個c函式。在 然後,為了共享這個庫,我在終端做了這個 gcc shared wl,install name,testlib.so o testlib...

在python中使用websocket

介紹一款很帥的外掛程式autobahnpython,通過它可以在python中很方便的使用websocket進行通訊 基於twisted框架 這個外掛程式真正強大的地方是它提供了乙個 發布 訂閱模式,具體內容有空再寫,先簡單介紹一下如何建立傳統的連線。建立伺服器 必須的模組 from twisted...

在Python中使用 slots

這篇文章主要介紹了在python中使用 slots 方法的詳細教程,slots 方法是python的乙個重要內建類方法,基於python2.x版本,需要的朋友可以參考下 正常情況下,當我們定義了乙個class,建立了乙個class的例項後,我們可以給該例項繫結任何屬性和方法,這就是動態語言的靈活性。...