Bir çox Python paketləri(modulları) C və ya C++ dilləri ilə yazılır.Bu bəhsdə giriş üçün python paketi hazırlayacağıq.
İlk əvvəl iki fayl yaradaq first.c və setup.py
(terminaldan
$ touch first.c
$ touch setup.py
yolu ilə də yarada bilərik)
first.c faylını açırıq aşağıdakı kodları fayla əlavə edirik
Kodlara açıqlama verək.
Kökdən python.h faylını include edirik.Daha sonra istifadə olunacaq funksiyamızı hazırlayırıq
integer(PyObject* self, PyObject* args)
{
const int* input_integer;
double reg;
if (!PyArg_ParseTuple(args, “i”, &input_integer))
return NULL;
printf(color_blue “Output : %d\n”,input_integer);
Py_RETURN_NONE;
}
————————————————————————————————————
funksiyamız integer adı ilə istifadə olunacaq.tam ədədləri alacağından veriləni pointer olaraq aşağıdakı şəkildə ifadə edək.
const int* input_integer;
Funksiyanın alacağı dəyər integer olduğundan
if (!PyArg_ParseTuple(args, “i”, &input_integer))
“i” -ilə ifadə etdik(str üçün -s float üçün f olaraq yazılır)
istifadəçinin verdiyi integer dəyəri mavi rənglə çap edək.
printf(color_blue “Output : %d\n”,input_integer);
istifadə edəcəyimiz funksiyanın listəsini tərtib edək
static PyMethodDef show_funcs[] =
{
{“integer”,integer, METH_VARARGS, “”},
{NULL, NULL, 0, NULL}
};
və çağrılacaq funksiyalar üçün əsas predmeti show parametri ilə tərtib edək
PyMODINIT_FUNC
initshow(void)
{
(void) Py_InitModule(“show“, show_funcs);
}
setup.py faylına daxil oluruq
Yuxarıdakı kodları fayla əlavə etdikdən sonra yaddaşa veririk və ardından terminalı açırıq
terminaldan faylları açdığımız qovluğa daxil olub
xaos@techaz:~/Programlar/c/C_extension$ sudo python setup.py install yazırıq
Və paketimiz show adı ilə python2.7 qovluğu altına yerləşdi.
pythonu çağırırıq
paketə dir(show) ilə baxdıqda bir ədəd funksiyamız-integer olduğunu görürük.funksiyadan istifadə edək
Sonuncu veriləni string cinsində yazsaqda python bizə xəta olduğu məlumatını verdi.Biz integer funksiyasını yalnız tam ədədlər üçün tərtib etmişik
>> from show import*
>>> integer(12)
Output : 12
>>>>> integer(45+45)
Output : 90
>>>
Paketimizə string cinsi üçün funksiya əlavə edək
first.c faylına daxil olaraq kiçik dəyişikliklər edək
string(PyObject* self, PyObject* args)
{
const int* input_string;
if (!PyArg_ParseTuple(args, “s”, &input_string))
return NULL;
printf(color_green “Output : \n%s\n”,input_string);
Py_RETURN_NONE;
}
static PyMethodDef show_funcs[] =
{
{“integer”,integer, METH_VARARGS, “”},
{“string”,string, METH_VARARGS, “”},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initshow(void)
{
(void) Py_InitModule(“show”, show_funcs);
}
Bütövlükdə kodlarımız
#include <Python.h>
#define color_blue “\x1b[34m”
#define color_green “\x1b[32m”
static PyObject*
integer(PyObject* self, PyObject* args)
{
const int* input_integer;
if (!PyArg_ParseTuple(args, “i”, &input_integer))
return NULL;
printf(color_blue “Output : \n%d\n”,input_integer);
Py_RETURN_NONE;
}
string(PyObject* self, PyObject* args)
{
const int* input_string;
if (!PyArg_ParseTuple(args, “s”, &input_string))
return NULL;
printf(color_green “Output : \n%s\n”,input_string);
Py_RETURN_NONE;
}
static PyMethodDef show_funcs[] =
{
{“integer”,integer, METH_VARARGS, “”},
{“string”,string, METH_VARARGS, “”},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initshow(void)
{
(void) Py_InitModule(“show”, show_funcs);
}
Yaddaşa verib terminaldan
$ sudo python setup.py install
yazırıq
daha sonra python -u çağırırıq
>> import show
>>> dir(show)
[‘__doc__’, ‘__file__’, ‘__name__’, ‘__package__’, ‘integer’, ‘string’]
>>> from show import*
>>> string(“Salam Azerbaijan”)
Output :
Salam Azerbaijan
>>> string(“****”*12)
Output :
************************************************
>>> string(“Hello\n Azerbaijan”)
Output :
Hello
Azerbaijan
>>> string(“Hello \t\t\nAzerbaijan”)
Output :
Hello
Azerbaijan
>>> string(“Hello \t\t\Azerbaijan”)
Output :
Hello \Azerbaijan
>>> string(“Hello \vAzerbaijan”)
Output :
Hello
Azerbaijan
>>> integer(12)
Output :
12
>>> integer(12*12)
Output :
144
>>> print integer(12)
Output :
12
None
>>> print integer(12*12)
Output :
144
None
>>> print integer
<built-in function integer>
>>> i=144
>>> integer(i)
Output :
144
>>> i=”System”
>>> for v in i:
… string(v)
…
Output :
S
Output :
y
Output :
s
Output :
t
Output :
e
Output :
m
>>>