مقایسه Python و C++

مقایسه ++C و پایتون

داشتم پروژه های نمونه Opnecv (شامل image stitching و image stitching detailed) برای تولید تصاویر پانوراما را تحلیل می کردم که به عنوان مثال درس بینایی ماشین در کلاس توضیح دهم. برای درک بیشتر، به دنبال مثالهایی با توضیحات کاملتر در وب بودم که در حین جستجو به پروژه ای رسیدم که با پایتون نوشته شده بود و خیلی خوب تمام بخشهایش توضیح داده شده بود. این شد که پایتون را به ویژوال استودیو اضافه کرده و پروژه مذکور را را کامپایل و اجرا کردم. دیدم با وجود اینکه این برنامه از نسخه باینری کتابخانه OpenCV استفاده می کند، زمان اجرا خیلی کند است. بررسی کردم دیدم مشکل سر یک تابعی هست که دو حلقه for تو در تو دارد و کل تصویر را اسکن می کند. برای مقایسه با ++C تصمیم گرفتم کد را به ++C بنویسم و این شد که پایتون را یاد گرفتم و کد را به ++C تبدیل کردم.

مقایسه زمان اجرای برنامه در پایتون و ++C

نتیجه مقایسه جالب بود. غیر از حلقه for بقیه بخشها از نظر زمانی تقریبا یکسان بود چرا که هر دو از کتابخانه OpenCV استفاده می کردند که اصالتا کد ++C است. اما در حلقه for کد ++C نزدیک به ۱۰ برابر سریعتر از پایتون اجرا می شود. زمانها را ببینید:
مقایسه سی پلاس پلاس و پایتون

​زمان اجرای کد سی پلاس پلاس ۱٫۲۵ ثانیه و زمان اجرای کد پایتون ۱۰٫۴۷ ثانیه بود.
از این زمانها در پایتون حدود ۱٫۵ ثانیه مربوط به توابع داخلی OpenCV بوده و ۹ ثانیه مربوط به حلقه for تو در تو است که روی کل تصویر جاروب می شود.

در C++ کل زمان تقریبا مربوط به توابع داخلی OpenCV بوده و حلقه for تودرتو تنها ۰٫۰۰۲ ثانیه زمان برد.

لذا در کل برنامه، ++C حدود ۱۰ برابر سریعتر بوده و در حلقه for تفاوت سرعت وحشتناک است: ۹ ثانیه به ۰٫۰۰۲ ثانیه می شود ۴۵۰۰ برابر سرعت بهتر ++C نسبت به زبان اسکریپتی پایتون.

نتیجه مقایسه ++C و پایتون

پایتون بسیار ساده تر از ++C است. لذا اگر برنامه نویس حرفه ای ++C هستید در کمتر از یک روز پایتون را یاد می گیرید. سرعت کد نویسی پایتون به دلیل داشتن امکانات فراوان، که الان جای بحثش نیست، زیاد است. اما دو مشکل دارد: یکی اسکریپتی بودن و اجرای خط به خط که همیشه نیازمند این هستید که پایتون (همان ورژنی که شما استفاده کرده اید) در کامپیوتر مقصد نصب باشد. دوم سرعت کم در حلقه ها و دستورات شرطی.

لذا برای کاربردهایی که پردازشهای سنگین و حلقه های زیاد ندارید استفاده از پایتون خوب است. برای کارهای پردازشی یا باید سراغ ++C بروید یا اینکه اگر اصرار به استفاده از پایتون دارید، بخشهای پردازشی کد را حتما از نسخه های باینری کتابخانه های ثالث استفاده کنید. اگر شما هم تجربه ای دارید در نظرات همین پست، به اشتراک بگذارید.

سایر عناوین این مطلب:

کدام زبان برنامه نویسی برای پردازش تصویر و یادگیری ماشین مناسب تر است؟

سی پلاس پلاس بهتر است یا پایتون؟

C++ سریعتر است یا Python پایتون؟

6 در مورد “مقایسه ++C و پایتون”

  1. پایتون هم جای خود داره کسی میخاد راحت‌تر کد بزنه پایتون باید انتخاب کنه
    پایتون برای این نوشته شده که عموم مردم به با زبان برنامه نویسی ارتباط برقرار کنند
    کسی که میخواد وارد دنیای برنامه نویسی بشه پدرش در میاد c++ یاد بگیره ولی در عرض یک روز پایتون مقدماتی تمام میکنه

  2. به همین جهت تلگرام رو با C++نوشتن. خیلی دنبال این موضوع بودم که توسایت شما دیدم. من پایتون کار میکردم ولی دوست داشتم که برم سراغ C++ که با خوندن این مطلب مصمم شدم برم سراغ C++

  3. چه بررسی مفید و ارزشمندی ،متشکرم.
    چه خوب اگر که سرعت اجرا در زبان c و c++ و go را نیز مورد بررسی قرار می دادید و همچنین در ابعاد دیگر مانند سهولت یادگیری و …نیز بررسی می کردید و توصیه های اینچنینی ارائه می دادید که کدام گزینه من حیث المجموع گزینه ی پیشنهادی شماست.

    1. c و ++c را هم قبلا مقایسه کرده ام. تقریبا زبان C بین ۵ تا ۱۰% (بسته به میزان استفاده از کلاسها) از ++C سریعتر است اما امکانات ++C ارزش این مختصر کاهش سرعت را دارد.
      در مورد go تجربه ای ندارم.

  4. اکثرا زبان های اسکریپتی یه هدفی رو دنبال میکنن.
    به نظر من نقطه قوت پایتون همه کاره بودن و آسون بودنشه
    یا سطح بالا بودنش.
    ولی به طور کلی هیچ وقت نمیشه از یه زبان اسکریپتی انتظاراتی رو داشت که از زبان قدرتمند و سطح پایینی مثل c++ میره رو داشت از نظر سرعت پردازش. پایتون یه شروع خوب واسه یادگیریه ولی وقتی حرف از برنامه نویسی حرفه ای هست به نظرم هر زبانی مربوط به یه شاخه یا موقعیت خاصه. بستگی داره چی بخواید ازش.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا