python側のコードは変更してもC++のコンパイルは必要ない
g++ -I自分のpythonのinclude/python(自分のバージョン) -lpython(自分のバージョン)
ex)pyenvのanacondaの場合
g++ -I/home/ユーザーファイル/.pyenv/versions/anaconda3-4.4.0/include/python3.6m コンパイルファイル -lpython3.6m
#include<stdio.h> | |
#include<Python.h> | |
#include<string> | |
#include<iostream> | |
int main(){ | |
PyObject *pName,*pModule, *pTmp, *pFunc; | |
char *sTmp; | |
int data; | |
Py_Initialize(); | |
PyObject *sys = PyImport_ImportModule("sys"); | |
PyObject *path = PyObject_GetAttrString(sys, "path"); | |
PyList_Append(path,PyUnicode_DecodeFSDefault(".")); | |
pName = PyUnicode_DecodeFSDefault("py_test1"); | |
pModule = PyImport_Import(pName); | |
Py_DECREF(pName); | |
if(pModule != NULL){ | |
pFunc = PyObject_GetAttrString(pModule, "func"); | |
pTmp = PyObject_CallObject(pFunc, NULL); | |
PyArg_Parse(pTmp, "i", &data); | |
printf("%d\n",data); | |
} | |
Py_Finalize(); | |
return 0; | |
} |
#include<stdio.h> | |
#include<Python.h> | |
#include<string> | |
#include<iostream> | |
int main(){ | |
PyObject *pName,*pModule, *pTmp, *pFunc; | |
PyObject *pArgs, *pValue; | |
double res_data; | |
double a = 10.5; | |
//最初に必ず入れる | |
Py_Initialize(); | |
//カレントディレクトリを探す範囲にいれる------------------------- | |
PyObject *sys = PyImport_ImportModule("sys"); | |
PyObject *path = PyObject_GetAttrString(sys, "path"); | |
PyList_Append(path,PyUnicode_DecodeFSDefault(".")); | |
//--------------------------------------------------------------- | |
//探すファイルをしてい------------------------------------------- | |
pName = PyUnicode_DecodeFSDefault("py_test2"); | |
pModule = PyImport_Import(pName); | |
Py_DECREF(pName); | |
//--------------------------------------------------------------- | |
//タプルの作成 ----------------------------------------------- | |
pArgs = PyTuple_New(1);//タプルを新しく作成する | |
pValue = PyFloat_FromDouble(a);//pValueにaの数値を設定 | |
PyTuple_SetItem(pArgs,0,pValue);//タプルの0の位置にpValueを設定 | |
//--------------------------------------------------------------- | |
if(pModule != NULL){ | |
//pFuncに今回呼び出す関数を設定する(今回はfunc) | |
pFunc = PyObject_GetAttrString(pModule, "func"); | |
//pFuncを引数を与える(pArgsはタプルでなければならない) | |
pTmp = PyObject_CallObject(pFunc, pArgs); | |
//関数を実行 d:double型を受け取る | |
PyArg_Parse(pTmp, "d", &res_data); | |
printf("%f\n",res_data); | |
} | |
//最後に必ず入れる | |
Py_Finalize(); | |
return 0; | |
} |
import random | |
def func(): | |
a = [1,2,3,4,5] | |
b = random.choice(a) | |
print("hogehoge") | |
return b |
import random | |
def func(data): | |
print("hogehoge") | |
a = data | |
print(a) | |
list_data = [14,2,3.5,28] | |
list_data.append(a) | |
b = random.choice(list_data) | |
return b |
python側のコードは変更してもC++のコンパイルは必要ない
g++ -I自分のpythonのinclude/python(自分のバージョン) -lpython(自分のバージョン)
ex)pyenvのanacondaの場合
g++ -I/home/ユーザーファイル/.pyenv/versions/anaconda3-4.4.0/include/python3.6m コンパイルファイル -lpython3.6m