معرفی زبان برنامه نویسی پایتون - قسمت دوم

در قسمت گذشته به ویژگی های زبان برنامه نویسی پایتون و چند علت برای پرطرفداری آن پرداختیم. در این قسمت به مقایسه ورژن های مختلف آن، روشن کردن چندتا از اشکالاتی که به این زبان گرفته میشه و معرفی کوتاه بعضی کتاب خانه های آن می پردازیم.

پایتون 2 دربرابر پایتون 3

پایتون امروزه در 2 نسخه موجود است که انتخاب بین آنها می تواند افراد تازه کار را گمراه کند.

پایتون 2 نسخه قدیمی تر این زبان است که تا انتهای سال 2020 آپدیت های رسمی دریافت خواهد کرد (البته این زبان بعد از این تاریخ نیز ممکن است به حیات خود ادامه دهد !) . پایتون 3 نسخه به روز شده ی زبان پایتون است. به این نسخه از زبان پایتون ویژگی های مفید زیادی اضافه شده است، ویژگی هایی مانند یک مترجم کارآمد تر از گذشته و کنترل بهتر بر هم زمانی عملیات ها.

گسترده شدن استفاده از پایتون 3 به دلیل کم بودن تعداد کتاب خانه های نوشته شده برای آن در ابتدای حیات آن بسیار کند بوده است و در ابتدا بسیاری از کتاب خانه ها تنها پایتون 2 را پشتیبانی می کردند. این مشکل، استفاده از پایتون 3 در برنامه ها را بسیار سخت می کرد. ولی در طی چندسال گذشته، تعداد کتاب خانه هایی که تنها پایتون 2 را پشتیبانی می کردند کم شده است و بیشتر کتاب خانه ها از هردو نسخه پایتون پشتیبانی می کنند.

امروزه استفاده از پایتون 3 برای پروزه های جدید بهترین کار است، مگر آنکه مجبور به استفاده از ابزارهایی باشید که از پایتون 3 پشتیبانی نمی کنند.

کتاب خانه های پایتون

موفقیت پایتون برگرفته از اکوسیستم غنی این زبان است که شامل کتاب خانه های پیش فرض خود پایتون و تعداد زیادی کتاب خانه نوشته شده توسط دیگر برنامه نویسان است (که دسترسی و استفاده از آنها در برنامه های خودمان بسیار آسان است) .

کتاب خانه های پیش فرض پایتون ماژول هایی برای انجام کارهای متداول برنامه نویسی مانند عملیات های ریاضی، کار با رشته های متنی، دسترسی به فایل ها و کارهای پیشرفته تری مانند خواندن و نوشتن فایل هایی با فرمت های XMLو JSON و .. دارد. پایتون بصورت پیش فرض دارای یک کتاب خانه جهت اجرای رابط گرافیکی ساده (Tkinter) و یک نسخه از کتاب خانه SQLite 3 نیز هست.

ما علاوه بر کتاب خانه های پیش فرض پایتون، به هزاران کتاب خانه ساخته شده توسط برنامه نویسان دیگر هم از طریق PyPi دسترسی داریم. از این کتاب خانه ها میتوان به نام های زیر اشاره کرد :

  • کتاب خانه ی BeautifulSoup یک مجموعه ی کامل و بسیار توانمند جهت اسکرپینگ HTML و خارج کردن اطلاعات از آن برای ما فراهم می کند.
  • کتاب خانه ی Requests کار با درخواست های HTTP را برای ما بسیار راحت خواهد کرد.
  • فریم ورک هایی مانند Django و Flask به ما برای توسعه سریع سرویس های وب (چه ساده و چه پیچیده) کمک می کند.
  • از طریق Apache Libcloud میتوانیم چندین سرویس ابری را به طور همزمان مدیریت کنیم.
  • کتاب خانه های NumPy، Pandas، Matplotlib هم می توانند به ما در محاسبات ریاضی و آماری و تجسم داده ها کمک کنند.

مشکلات پایتون

لازم به ذکر است که بعضی کارها وجود دارند که پایتون برای آنها مناسب نیست. پایتون یک زبان سطح بالاست، پس برای برنامه های در سطح نزدیک به سخت افزار سیستم (مانند درایور ها و کرنل سیستم عامل ها) اصلا مناسب نیست.

همچنین پایتون برای نوشتن برنامه های standalone که نیاز به اجرا در چند محیط مختلف دارد اصلا مناسب نخواهد بود (منظور برنامه ای است که برای اجرا شدن نیاز به نصب نداشته باشد). به وسیله پایتون میتوان یک برنامه برای ویندوز، لینوکس و مک نوشت، ولی این کار اصلا ساده نخواهد بود و برنامه پیچیده ای خواهد بود.

پایتون در محیط هایی که سرعت مهم ترین ویژگی برنامه است هم بهترین انتخاب نیست. در این شرایط باید از زبان هایی مثل Cو یا C++ استفاده کنید.

مانند جاوا، C#و Go پایتون هم دارای قابلیت مدیریت حافظه به کمک garbage collection است. این توانایی به این معناست که برنامه نویس نیازی به در نظر داشتن پروسه ی تولید و از بین رفتن اجسام درون برنامه ندارد. درحالت عادی این کار به صورت اتوماتیک انجام می شود، اما اگر در جایی ما نیاز داشتیم می توانیم آن را به صورت دستی انجام دهیم، آن را به کل خاموش کنیم و یا قسمت های خاصی از کد را را از این قاعده مستثنا کنیم.

یک جنبه مهم پایتون پویایی آن است.با هر چیزی در این زبان، از توابع و حتی خود ماژول ها، به عنوان یک جسم برخورد می شود. هزینه این کار کم شدن سرعت زبان خواهد بود، ولی این کار نوشتن کد پیچیده را در این برنامه بسیار راحت می کند. برنامه نویس ها می توانند کارهای بسیار پیچیده ای را با چند دستور ساده انجام دهند و با هر قسمتی از برنامه که می خواهند ، به عنوان انتزاعاتی برخورد کنند که می توانند در آن هر تغییری ایجاد کنند.

استفاده پایتون از فضای خالی قبل از بعضی خط های کد، توسط برخی به عنوان یکی از بهترین و در عین حال در نظر یک گروه دیگر بدترین ویژگی های پایتون شناخته می شود. جلوتر بودن خط پایینی از خط بالایی در کد زیر تنها برای راحتی خواندن کد نیست، بلکه قسمتی از سینتکس برنامه است. مترجم های پایتون برنامه هایی که فاصله گذاری مناسب برای مشخص کردن قسمت های مختلف کد نداشته باشد را قبول نمی کنند.

12with open(‘myfile.txt’) as my_file:
     file_lines = [x.rstrip(‘\n’) for x in my_file]

استفاده از فضای خالی سفید در سینتکس ممکن است باعث ناراحتی برخی شود. ولی قوانین سخت گیرانه در فاصله گذاری در واقعیت بسیار کمتر از آنچه فکر می شود مزاحم هستند و باعث می شوند که ما در نهایت کدی خواناتر و تمیزتر داشته باشیم.

یکی دیگر از مسائلی که میتواند افرادی که شروع به یادگیری پایتون می کنند، به خصوص افرادی که از زبان هایی مثل Cیا جاوا به سراغ این زبان آمده اند، این است که در پایتون به صورت پیش فرض نوع متغیر ها به صورت پویا (duck typing) تعیین شده است که به بالا بردن سرعت کدنویسی کمک می کند، ولی در برنامه های بزرگتر این موضوع می تواند باعث مشکل شود. پایتون در نسخه های جدیدتر امکان استفاده از type hinting را فراهم کرده است تا برنامه هایی که نیاز به استفاده از متغیرهای ثابت (static typing) دارند بتوانند این کار را انجام دهد.

پایتون کند است؟ نه خیلی

یکی از مشکلاتی که درمورد پایتون بسیار ذکر می شود این است که این زبان، زبان کندی است. این موضوع تا حدی درست است. اگر سرعت اجرای برنامه ای که با پایتون نوشته شده است را با سرعت برنامه ی یکسانی که با C، C++ و یا JAVA نوشته شده است مقایسه کنیم شاهد این تفاوت سرعت خواهیم بود.

علت این کاهش سرعت چیست؟ به دلیل انعطاف پذیری ذاتی نوع متغیرها در پایتون، بهینه سازی برنامه ی نوشته شده با این زبان برای افزایش سرعت انجام آن بسیار سخت است.

بهینه سازی عملکرد در پایتون

برنامه های نوشته شده با پایتون حتما به علت استفاده از پایتون کند نیستند. بسیاری از برنامه های پایتون به خاطر عدم استفاده مناسب از توانایی های در دسترس برنامه نویس است که کند هستند. برای مثال سرعت عملیات های ریاضی و آماری را می توان با استفاده از کتاب خانه هایی مثل Pandas و یا NumPy بسیار افزایش داد.

برای معرفی یک راه بهینه سازی دیگر باید یک اصطلاح برایتان تعریف کنیم.

یک اصطلاح معروف در بین برنامه نویسان این است که 90 درصد کارایی یک برنامه در 10 درصد کد آن است. پس برنامه نویس می تواند با بهینه کردن این 10 درصد کد، شاهد پیشرفت زیادی در سرعت انجام برنامه باشد. حتی می توان آن 10 درصد از کد را به زبان سریعتری مانند اسمبلی و یا C (با پروژه هایی مثل Cythom یا Numba) تبدیل کرد، نتیجه این کار برنامه ای خواهد بود که سرعت انجام آن اختلاف کمی با برنامه ی تماما نوشته شده با C دارد و پیچیدگی آن از برنامه ای که کاملا با زبان C نوشته شده است بسیار کمتر خواهد بود.

البته باید دقت داشت که در بسیاری از موارد زمان مورد نیاز برای ساخت برنامه، بسیار بیشتر از زمان مورد نیاز برای اجرای برنامه است.

یگ برنامه پایتون ممکن است 6 ثانیه برای اجرا شدن زمان نیاز داشته باشد، در حالی که این عدد برای برنامه ی نوشته شده در یک زبان دیگر می تواند نیم ثانیه باشد. این نیز باید در نظر داشت که نوشتن برنامه در پایتون 10 دقیقه وقت نیاز خواهد داشت و همان برنامه در زبان دیگر نیاز به یک ساعت و یا بیشتر زمان برای ساخته شدن نیاز دارد. مقدار زمانی که به خاطر نوشتن برنامه توسط پایتون صرفه جویی کرده ایم، بسیار بیشتر از زمانی است که به علت اجرای کندتر برنامه در پایتون از دست داده ایم.

البته این نسبت در برنامه هایی کمی که نیاز به سرعت خالص بالا و همزمانی زیاد دارند، مثل برنامه های معاملاتی بورس و یا سیستم های شبیه آن اهمیتی ندارد و تنها سرعت انجام برنامه مهم است. ولی در بیشتر برنامه های نوشته شده، سرعت پایتون کافی خواهد بود.

البته علاوه بر کافی بودن سرعت پایتون برای بیشتر برنامه ها، باید در نظر داشت که انعطاف پذیری، سرعت و راحتی که پایتون در حین نوشتن برنامه در اختیار ما می گذارد، دست مارا برای ساختن برنامه هایی که در دیگر زبان ها بسیار پیچیده تر می شد باز می گذارد.

به طور خلاصه، وقتی سرعت ساخت برنامه و راحتی ساخت آن از چند دهم ثانیه کمتر بودن زمان کار برنامه اهمیت بالاتری داشته باشد، پایتون راه مناسبی برای آن کار خواهد بود.

امیر هستم از ایران پایتونیرز، ممنونم از وقتی که برای خوندن قسمت دوم این پست گذاشتید.

ما به تازگی استفاده از پلتفرم ویرگول رو شروع کردیم و به زودی مطالب بیشتری هم اینجا قرار داده میشه.

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

منبع : www.infoworld.com