Page 120 - 6734
P. 120

Розширення Python мовою C++
               Нижче  наведено  послідовність  дій  для  створення  мовою  C++
           Python-модуля  Extest,  який  містить  функцію  fac,  що  повертає
           факторіал  числа.  Створення  модулів  розширення  мовою  C++  [14,
           19] дозволяє вирішити проблему низької продуктивності Python.

               1.Вихідний код модуля розширення мовою C++ (main.cpp):
           int fac(int n) // рекурсивна функція, повертає
           факторіал
           {
               if (n < 2) return(1);
               return (n)*fac(n-1);
           }

           #include "Python.h" // під’єднати файл Python.h
           // функція повертає об’єкт Python типу int
           static PyObject *Extest_fac(PyObject *self, PyObject
           *args)
           {
               int num;
               // конвертує дане Python типу int у C++ типу int
               if (!PyArg_ParseTuple(args, "i", &num))
                   return NULL;
               // конвертує дане C++ типу int у Python типу int
               return (PyObject*)Py_BuildValue("i", fac(num));
           }

           // масив методів, які експортує модуль
           static PyMethodDef ExtestMethods[] =
           {{ "fac", Extest_fac, METH_VARARGS }, { NULL, NULL
           },};

           void initExtest() // функція ініціалізації модуля
           {

                                         119
   115   116   117   118   119   120   121   122   123   124   125