|
Cetus Group
Информационные системы и программное обеспечение
Меню
Файлы проекта
Поддержка
E-mail:
cetus@ukr.net
|
Расширение и встраивание Python
Редакция 06.02.2006
А.Г. © Часть 1 - "Простой пример расширения Python"
Расширение интерпретируемых языков программирования (в т.ч. Python) может понадобиться
в следующих случаях:
Для расширения функциональности Python средствами языка C необходимо выполнить:
Ниже приведен простой пример реализации нового оператора Python - оператора вычисления длины гипотенузы прямоугольного треугольника. В примере реализована всего одна функция, при необходимости могут быть реализованы и другие функции - доступные интерпретатору при их регистрации в таблице методов, или "приватные" - без регистрации.
/*** c4py.c ***/
#include <python/Python.h>
//реализация функции hipot() для Python
//val - тьюпл с аргументами вызова функции
static PyObject *HipotCmd(PyObject *self,PyObject *val)
{
double a,b,c;
//получаем переданные в функцию аргументы (определены два аргумента типа double)
if(!PyArg_ParseTuple(val,"dd",&a,&b))
return NULL;
//вычисляем результат - длину гипотенузы
c = sqrt(a*a+b*b);
//преобразуем результат в объект Python и возвращаем результат преобразования интерпретатору
return Py_BuildValue("d",c);
}
//таблица методов модуля для интерпретатора
static PyMethodDef threeMethods[] = {
{"hipot",HipotCmd,METH_VARARGS,"Calc hipotenuse"},
{NULL,NULL,0,NULL}
};
//инициализация модуля three
void initthree(void)
{
Py_InitModule("three",threeMethods);
}
После компиляции модуля в разделяемую библиотеку: gcc --shared c4py.c -o three.so он может быть использован в Python-программе следующим образом: import three print three.hipot(3,4) 5.0 |