এখানে একটি উদাহরণ যেখানে একটি সাধারণ পাইথন বস্তু মোড়ানো এবং এমবেড করা হয়েছে৷ আমরা এর জন্য .c ব্যবহার করছি, c++ এর অনুরূপ ধাপ রয়েছে −
class PyClass(object): def __init__(self): self.data = [] def add(self, val): self.data.append(val) def __str__(self): return "Data: " + str(self.data) cdef public object createPyClass(): return PyClass() cdef public void addData(object p, int val): p.add(val) cdef public char* printCls(object p): return bytes(str(p), encoding = 'utf-8')
আমরা cython pycls.pyx দিয়ে কম্পাইল করি (c++ এর জন্য --cplus ব্যবহার করুন) যথাক্রমে সোর্স এবং ফাংশন ডিক্লেয়ারেশন সহ একটি .c এবং .h ফাইল তৈরি করতে। আমরা এখন একটি main.c ফাইল তৈরি করি যা পাইথন শুরু করে এবং আমরা এই ফাংশনগুলিকে কল করার জন্য প্রস্তুত -
#include "Python.h" // Python.h always gets included first. #include "pycls.h" // Include your header file. int main(int argc, char *argv[]){ Py_Initialize(); // initialize Python PyInit_pycls(); // initialize module (initpycls(); in Py2) PyObject *obj = createPyClass(); for(int i=0; i<10; i++){ addData(obj, i); } printf("%s\n", printCls(obj)); Py_Finalize(); return 0; }
যথাযথ পতাকাগুলির সাথে এটি কম্পাইল করা হচ্ছে (যা আপনি python-config [Py2] এর python3.5-config থেকে পেতে পারেন) −
gcc pycls.c main.c -L$(python3.5-config --cflags) -I$(python3.5-config --ldflags) -std=c99
আমাদের এক্সিকিউটেবল তৈরি করবে যা আমাদের অবজেক্টের সাথে ইন্টারঅ্যাক্ট করে −
./a.out Data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.h হেডার ফাইল তৈরি করে এমন পাবলিক কীওয়ার্ডের সাথে Cython ব্যবহার করে এই সব করা হয়েছে। আমরা বিকল্পভাবে শুধুমাত্র Cython-এর সাথে একটি পাইথন মডিউল কম্পাইল করতে পারি এবং হেডার তৈরি করতে পারি/অতিরিক্ত বয়লারপ্লেট নিজেই পরিচালনা করতে পারি।