2018년 6월 27일 수요일

Python C

https://docs.python.org/3/c-api/arg.html


#include "python.h"


static PyObject *
extest_circle(PyObject *self, PyObject *args)
{
int r;
int s;
if (!PyArg_ParseTuple(args, "i", &r)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
s = 3.141592*r*r;
return Py_BuildValue("i", s);  //python type conversion..
}

static PyObject *
extest_hap(PyObject *self, PyObject *args)
{
int a, b;
int sum;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
    sum = a + b;
return Py_BuildValue("i", sum);  //python type conversion..
}

static PyObject *
extest_strlen(PyObject *self, PyObject *args)
{
const char* str = NULL;
int len;
if (!PyArg_ParseTuple(args, "s", &str)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
len = strlen(str);
return Py_BuildValue("i", len);  //python type conversion..
}

static PyMethodDef extestMethods[] = {
{ "strlen", extest_strlen, METH_VARARGS, "count a string length." },
    { "hap", extest_hap, METH_VARARGS, "sum two" },
    { "circle", extest_circle, METH_VARARGS, "area of circle" },
    { NULL, NULL, 0, NULL } // 배열의 끝을 나타냅니다.
};

static struct PyModuleDef extestmodule = {
PyModuleDef_HEAD_INIT,
"extest",            // 모듈 이름
"It is test module.", // 모듈 설명을 적는 부분, 모듈의 __doc__에 저장됩니다.
-1,
extestMethods
};

PyMODINIT_FUNC
PyInit_extest(void)
{
return PyModule_Create(&extestmodule); // 공유 메모리 영역에 dll을 적재한다.
}

---------------------
import extest
n = extest.strlen("abc")
s = extest.hap(10, 20)
print(n, s)

print(extest.circle(10))



댓글 없음:

댓글 쓰기