منبع اصلی نوشتار زیر در این لینک قرار دارد

فراخوانی توابع زبان C در پایتون به روش CTypes

سه روش برای فراخوانی توابع C در کدهای پایتون وجود دارد که عبارتند از (ctypes، swig، python/c api) . هر روش مزایا و معایب مربوط به خودش را دارد. در این پست قصد داریم به آموزش روش ctypes بپردازیم.

اولا، چرا می خواهیم کد C را در پایتون اجرا کنیم؟!

  1.  می دانیم که C حدود ۵۰ برابر سریعتر از پایتون است.
  2. و دسترسی به منابع سطح پایین در C به راحتی فراهم می شود.

CTypes:

ماژول ctypes پایتون یکی از آسان‌ترین روش برای فراخوانی توابع C از پایتون است. ماژول ctypes سازگار با انواع داده هاست و توابعی را برای بارگذاری فایل های DLL فراهم می‌کند. به طوری که فراخوانی ها را می توان به کتابخانه‌های مشترک C بدون نیاز به اصلاح آن‌ها انجام داد. 

خب بریم سر وقت یک مثال در C

#include <stdio.h>

int abs(int x)
{
    return x < 0 ? -x : x;
}
int add(int x,int y)
{
    return x+y;
}

int main()
{
    printf("welcome to open-mind.ir");
    return 0;
}

خب در این قطعه کد دو تابع بازگشتی وجود دارد، در قسمت تابع abs یک ورودی می گیرد و قدر مطلق آن رو بر می گرداند و در تابع add دو تا ورودی می گیرد، سپس آن ها رو باهم جمع و مقدار جمع شده را بر می گرداند.

در قدم بعدی میریم سراغ کامپایل کد C

gcc main.c -shared -o program.so

کدهای C که نوشتیم در فایلی به نام main.c وجود دارد با استفاده از دستور بالا آن را کامپایل می کنیم نتیجه مورد نظر فایلی را با پسوند so.  به ما تحویل می دهد!

قدم اخر: میریم سراغ کدهای پایتون

from ctypes import *

#load the shared object file
obj = CDLL('program.so')

print(obj.abs(-22))

print(obj.add(6,9))

ماژول ctypes پایتون را import می کنیم. با استفاده از تابع CDLL فایلی را که پسوند so تولید کردیم رو مینویسیم. و آن را در یک متغیر می ریزیم

خب تمام شد 🙂 حالا می توانیم توابعی را که در کد C نوشتیم به راحتی اجرا و استفاده کنیم.

نتیجه

22
15