vs c 呼叫python函式

2021-08-17 20:00:10 字數 1662 閱讀 7532

1.環境配置

2.引用**

#include #include "python.h"

int sppfeature(string str)

int val = 0;

pyobject * pmodule = null;

pyobject * pfunc = null;

pyobject * pname = pystring_fromstring("exfeature");//載入exfeature.py檔案

pmodule = pyimport_import(pname);

//pmodule = pyimport_importmodule("exfeature");//test001:python檔名

if (!pmodule)

pyobject *pdict = pymodule_getdict(pmodule);

if (!pdict)

pfunc = pydict_getitemstring(pdict, "exfeatofimg");//提取exfeatofimg函式

//pfunc = pyobject_getattrstring(pmodule, "exfeatofimg");//add:python檔案中的函式名

//建立引數:

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

char *ustr = g2u(str.c_str()); //由於vs採用gb2312編碼,python採用utf-8,傳遞的字串python無法正常解碼,需要提前進行轉換

pytuple_setitem(pargs, 0, py_buildvalue("s", ustr));//0--序號,s表示建立字串型變數

pyobject *preturn = null;

preturn = pyeval_callobject(pfunc, pargs);//呼叫函式

int size = pylist_size(preturn);//preturn 為列表

//cout << "返回列表的大小為: " << size << endl;

for (int i = 0; i < size; ++i)

{ pyobject *pnewage = pylist_getitem(preturn, i);//相當於 python中的preturn[i]

float newage;

pyarg_parse(pnewage, "f", &newage);//將python的值轉為c的值

int v = (newage > 0) ? 1 : 0;

val |= (v說明:

exfeature.py檔案需要放置在c:\python27\lib路徑下

參考:

VS C 中呼叫C 動態庫靜態函式

test.cpp 定義控制台應用程式的入口點。include stdafx.h include using debug writelog.dll using namespace writelog1 using namespace std int tmain int argc,tchar argv 說...

python呼叫所有函式 python 呼叫函式

python內建了很多有用的函式,我們可以直接呼叫。也可以在互動式命令列通過help abs 檢視abs函式的幫助資訊。呼叫abs函式 abs 100 abs 20 abs 12.34 12.34 呼叫函式的時候,如果傳入的引數數量不對,會報typeerror的錯誤,並且python會明確地告訴你 ...

Python函式呼叫

函式通過函式名加上一組圓括號進行呼叫,引數放在圓括號內,多個引數之間用逗號分隔。python的所有語句都是實時執行的,不存在編譯過程。def也是一條可執行語句,定義乙個函式。所有函式的呼叫必須在函式定義之後。在python中,函式名也是乙個變數,它引用return語句返回的值,沒有返回值時,函式值為...