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

چرا باید کد های C را در پایتون اجرا کنیم؟

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

ماژول 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 PyBlack");
    return 0;
}

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

حالا باید برای فراخوانی کدها،اونها رو کامپایل کنیم

gcc main.c -shared -o program.so

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

حالا میریم سراغ اجرای کد C در پایتون

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

تامام.


ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

نظرات ارسال شده


  1. DęЯǞqΦЦlǞ ..:

    www.saba-web.ir



    DęЯǞqΦЦlǞ ..:

    سلام وب خوبی داری ب منم سر بزنم



    درباره ما

    Official Weblog Of PyBlack

    Python World News, Introduction & Tutorials

    ـــــــــــــــــــــــــــــــــــــــــــ

    Telegram Channel : https://t.me/Pyblack

    MO3IN MH : @MH_Support_bot

    جستجوگر

    شبکه اجتماعی