همه چیز در مورد پایتون
شاید بتوانیم این گونه بیان کنیم که پایتون در مقایسه با زبانهای بزرگ یک زبان نسبتاً جدید به شمار میرود. این زبان برنامهنویسی در سال 1991 به دنیای برنامهنویسی وارد شد. از همان ابتدا، پایتون بهمنظور پر کردن شکافهای موجود در دنیای برنامهنویسی و ارائه راهکاری بهمنظور نوشتن اسکریپتهایی که فرآیند انجام یکسری از کارهای روتین خستهکننده را به طور خودکار اجرا کنند یا ساخت یک نمونه اولیه از برنامههای کاربردی که در یک یا چند زبان دیگر پیادهسازی شوند، مورد استفاده قرار گرفت. با این حال در چند سال گذشته، پایتون به یکی از ابزارهای تراز اول در زمینه توسعه برنامههای کاربردی، مدیریت زیرساختها و تحلیل دادهها تبدیل شده است. امروزه پایتون در زمینه توسعه برنامههای کاربردی تحت وب و مدیریت سیستمها و تجزیه و تحلیل بزرگ دادهها که رشد انفجاری به خود گرفتهاند و همچنین هوش مصنوعی به یکی از بازیگران اصلی دنیای فناوری تبدیل شده است. پایتون این موفقیت چشمگیر و کاربرد گسترده را مدیون یکسری ویژگیهای ارزشمندی است که هم در اختیار توسعهدهندگان حرفهای و هم در اختیار توسعهدهندگان تازهکار قرار داده است. از جمله این ویژگیها به موارد زیر میتوان اشاره کرد.
یادگیری پایتون ساده است
یادگیری کمدردسر پایتون به برنامهنویسان تازهکار اجازه داده است با صرف کمی وقت اصول اولیه این زبان را یاد بگیرند و اولین برنامه کاربردی خود را با این زبان طراحی کنند. این زبان به گونهای ساخته شده است که ترکیب نحوی آن کاملاً خوانا است و برنامهنویسان بدون مشکل خاصی قادرند منطق دستورات را بهشکل صریح و روشنی درک کنند و برای همکاران خود شرح دهند. سادگی، خوانایی و دور بودن از پیچیدگیهای رایج باعث شده است تا پایتون به گزینه ایدهآلی برای تدریس در مدارس و مراکز آموزشی تبدیل شود. همین سادگی و دور بودن از پیچیدگیها است که باعث شده است پایتون اولین انتخاب برنامهنویسانی باشد که تازه به دنیای برنامهنویسی قدم گذاشتهاند. تسلط بر زبان پایتون بهمعنای آن است که طراحان میتوانند زمان بیشتری را برای فکر کردن درباره یک مشکل و پیدا کردن راه حلی برای آن صرف و در مقابل زمان کمتری برای فکر کردن در مورد ترکیب نحوی و پیچیدگیهای دستورات این زبان صرف کنند. همچنین، زمانی که یک برنامه به طور کامل نوشته شد، طراحان با صرف کمترین زمان ممکن میتوانند منطق به کار گرفته در کدها را برای دیگران تشریح کنند، بهدلیل آنکه همه چیز روشن و گویا است.
پایتون بهشکل گستردهای به کار گرفته شده و پشتیبانی میشود
پایتون دو ویژگی یک زبان خوب یعنی محبوبیت و کاربرد گسترده را توأمان با یکدیگر در اختیار دارد. کافی است به آمارهای منتشر شده از سوی منابع معتبری همچون Tiobe و پروژههایی که روی سایت گیتهاب قرار گرفته و با پایتون نوشته شدهاند نگاهی داشته باشید تا متوجه شوید این زبان تا چه اندازه نزد طراحان محبوب است. (شکل 1)
برنامههای نوشته شده با پایتون روی سیستم عاملها و سکوهای اصلی و سیستم عاملهای خاصتر بهخوبی اجرا میشوند. بخش اعظمی از کتابخانههای بزرگ و سرویسهای مبتنی بر API به اشکال مختلفی پیوندهای مرتبط با پایتون را در خود جای دادهاند، به طوری که به پایتون اجازه دادهاند از طریق واسطها با این سرویسها ارتباط برقرار یا بهطور مستقیم از کتابخانهها استفاده کند. در حالی که پایتون را در گروه سریعترین زبانهای برنامهنویسی نمیتوان قرار داد و شاید کند بودن نقطه ضعف اصلی این زبان به شمار میرود، اما در مقابل تطبیقپذیری بسیار بالایی دارد.
پایتون زبانی نیست که برای انجام کارهای عادی و پیش پا افتاده مورد استفاده قرار گیرد. از این زبان بهمنظور ساخت برنامههای کاملاً حرفهای با کیفیت بالا، برنامههای مستقل و سرویسهای وب میتوان استفاده کرد. اسکریپتهایی که با این زبان نوشته میشوند، بهسادگی قادرند فرآیندهای بزرگی را مدیریت و خودکارسازی کنند.
پایتون برای انجام چه کارهایی مورد استفاده قرار میگیرد؟
پایتون یک زبان برنامهنویسی چندمنظوره و شیگرا است که برای توسعه سایتهای پویا، تحلیل دادهها و نوشتن برنامههای دسکتاپ میتوان از آن استفاده کرد. اما اساسیترین کاربرد پایتون در ارتباط با اسکریپتنویسی و خودکارسازی است. پایتون تنها یک جایگزین برای اسکرپیتهای شل یا فایلهای دستهای نیست، بهواسطه آنکه از پایتون برای تعامل خودکار با مرورگرهای وب، برنامههای گرافیکی و پیکربندی سیستمها از طریق ابزارهایی همچون Salt و Ansible میتوان استفاده کرد.
از پایتون در ارتباط با برنامهنویسیهای عادی و رایج نیز میتوان استفاده کرد
طراحان و توسعهدهندگان نرمافزار این توانایی را دارند تا هر دو گروه برنامههای کنسولی و گرافیکی را با پایتون ایجاد و آنها را بهشکل خوداجرا مستقر کنند. پایتون به طور ذاتی این توانایی را ندارد تا یک فایل باینری مستقل را از یک اسکریپت ایجاد کند. اما پکیجهای ثالثی شبیه به cx_Freeze یا PyInstaller این کاستی پایتون را جبران کردهاند.
زبان پایتون در ارتباط با یادگیری ماشینی و علم دادهها نیز به کار گرفته میشود
در چند سال اخیر فرآیند تجزیه و تحلیل دادههای مرتبط با فناوری اطلاعات بیش از اندازه پیچیده شده است، به همین دلیل پایتون و در تعقیب آن زبان آر به ستارگان یکهتاز این میدان تبدیل شدهاند. با توجه به محبوبیت بیش از اندازه زبان پایتون امروزه شاهدیم که طیف گستردهای از کتابخانههای مورد استفاده در یادگیری ماشینی و علم دادهها یک واسط یا به عبارت دقیقتر رابطهای ویژه زبان پایتون را ارائه کردهاند.
پایتون در ارتباط با وب سرویسها و توابع RESTful نیز به کار گرفته میشود
کتابخانههای محلی پایتون بههمراه چهارچوبهای وب بخش ثالث سریعترین و راحتترین راهکار را در اختیار طراحان وب قرار دادهاند تا بدون دردسر خاصی بتوانند توابع REST چندخطی یا یک سایت دادهمحور مملو از اطلاعات را با استفاده از پایتون طراحی کنند. REST (سرنام Representational State Transfer) یک معماری وب سرویس است که از پروتکل HTTP برای انتقال اطلاعات میان کلاینت و سرور استفاده میکند. جدیدترین نگارشهای عرضه شده از پایتون بهشکل قدرتمندی از عملیات غیرهمزمان پشتیبانی میکند. پشتیبانی از عملیات غیرهمزمان بهمعنای آن است که سایتها قادرند دهها هزار درخواست در هر ثانیه را از طریق کتابخانههای درستی که مورد استفاده قرار میدهند مدیریت کنند.
شکل 1- گزارشی که سایت tiobe در آگوست 2017 منتشر کرد، نشان داد که پایتون هنوز هم جزء پنج زبان برتر برنامهنویسی است.
پایتون در ارتباط با برنامهنویسی Metaprogramming به کار گرفته شود
اصطلاح Metaprogramming بهمعنای نوشتن برنامهای است که قادر است فرآیندهای خواندن، تحلیل و ساخت سایر برنامهها و حتی خود را در زمان اجرا مدیریت کند. در زبان پایتون هرچیز همچون ماژولهای پایتون و حتی خود کتابخانهها بهعنوان یک شی در نظر گرفته میشوند. این رویکرد به پایتون اجازه میدهد بهشکل کارآمدتری کدها را تولید کند. در نتیجه امکان ساخت برنامههایی که قادر باشند توابع خود را دستکاری کنند و نوعی فرآیند توسعه را امکانپذیر سازند، در پایتون وجود دارد. رویکردی که پیادهسازی آن در زبانهای دیگر کار بسیار مشکل و در بعضی موارد غیرممکن است.
پایتون یک زبان چسبنده است
کدهای پایتون خاصیت چسبندگی دارند، به طوری که در بعضی موارد از زبان پایتون بهعنوان یک زبان چسبنده (Glue language) نام برده میشود. زبان پرل نیز چنین ویژگی را دارد. این ویژگی به شما اجازه میدهد کدهای متفاوت را به یکدیگر وصل کنید. (به طور معمول کتابخانههایی با رابطهای زبان سی) از این تکنیک در زمینه علم دادهها و یادگیری ماشینی استفاده میشود.
حالا که به تواناییهای زبان پایتون اشاره کردیم، بد نیست به یکسری کارهایی که پایتون قادر به انجام آنها نیست یا بهتر است در انجام چنین کارهایی از پایتون استفاده نشود نیز اشارهای داشته باشیم. پایتون یک زبان برنامهنویسی سطح بالا است، در نتیجه برای برنامهنویسیهای سطح سیستمی همچون درایورنویسی یا هسته سیستم عاملها مناسب نیست. همچنین، ایده جالبی نیست زمانی که بهدنبال فراخوانی کتابخانههای چندسکویی هستید از پایتون استفاده کنید. میتوانید برنامههای مستقل پایتون را برای سکوهای ویندوز، مک و لینوکس طراحی کنید، اما کار چندان سادهای نیست و در بعضی موارد خروجی ممکن است مطابق میل شما نباشد. سرانجام زمانی که سرعت یکی از اولویتهای اصلی برنامه کاربردی است که بهدنبال ساخت آن هستید، نباید به سراغ پایتون بروید. در چنین شرایطی بهتر است از گزینههای شناخته شدهای همچون سی یا سی پلاس پلاس استفاده کنید.
جوانب مثبت و منفی زبان پایتون
ترکیب نحوی پایتون کاملاً خوانا و تمیز است. به طور مثال، نوشتن یک برنامه استاندارد Hello world در نسخه 3.x این زبان به دور از هرگونه کد اضافی بهصورت (”!print(“Hello world نوشته میشود. پایتون عناصر نحوی زیادی را ارائه میکند که در مدت زمان اجرای یک برنامه میتوان از آنها استفاده کرد. به طور مثال، برنامه ساده زیر را در نظر بگیرید که برای خواندن خطوط موجود در یک فایل متنی داخل یک شی List نوشته شده است.
with open(‘myfile.txt’) as my_file:
file_lines = [x.strip(‘\n’) for x in my_file]
ساختار with/as از جمله اشیای زبان پایتون به شمار میرود که به قابلیت Context manager تجهیز شده است. این ساختار راهکار کارآمدی برای تعریف یک شی تخصیص داده شده به یک بلوک از کدها و سپس آزاد کردن شی از بلوکی که به آن تخصیص داده شده است را ارائه میکند. در این مثال، شی my_file از طریق تابع open معرفی شده است. همان گونه که مشاهده میکنید، در پایتون اغلب کارها با حداقل کدنویسی به سرانجام میرسند. در مثال فوق، بهجای آنکه به چند خط کدنویسی برای باز کردن یک فایل، خواندن خطوط مختلف و درنهایت بستن فایل نیاز داشته باشید، تنها از طریق دو خط این کارها را انجام دهید.
این تکنیک در مقایسه با بهکارگیری بلوک Try-finally سادهتر بوده و از خوانایی بیشتری برخوردار است. ساختار [x … for x in my_file] یکی دیگر از تکنیکهای مختص پایتون است. این ترکیب نحوی به یک عنصر تخصیص داده شده که شامل عناصر دیگری است اجازه میدهد (در این مثال my_file و خطوطی که همراه با آن هستند) که تکرار شده و به عناصر تکرارشونده نیز (در این مثال x) اجازه میدهد که پردازش شده و به طور خودکار به داخل فهرست اضافه شوند. همانند هر زبان دیگری امکان انجام این کار از طریق یک حلقه for…. نیز امکانپذیر است، اما پایتون به شما اجازه میدهد کارها را با کمترین پیچیدگی و بالاترین خوانایی انجام دهید. شبیه به زبانهای دیگری همچون جاوا، سی شارپ و گو، زبان پایتون برای مدیریت حافظه از تکنیک Garbage collections استفاده میکند. در نتیجه برنامهنویس در زمان نوشتن اشیا و آزادسازی اشیا دغدغهای نخواهد داشت. بهطور معمول، فرآیند Garbage collection در پس زمینه و بهشکل خودکار انجام میشود. اما اگر مشکلی در این زمینه به وجود آید، برنامهنویس میتواند این فرآیند را بهطور دستی مدیریت کند. یکی دیگر از ویژگیهای جالب پایتون پویایی این زبان است. هر چیزی در این زبان همچون توابع و خود ماژولها بهعنوان یک شی شناخته و مدیریت میشوند. در حالی که این تکنیک تا حدودی سرعت را قربانی میکند، اما در مقابل اجازه میدهد کدهای سطح بالا را بهسادگی بنویسید. این تکنیک نهتنها به طراحان اجازه میدهد اشیای پیچیده را بهسادگی و از طریق تنها چند دستورالعمل مدیریت کنند، بلکه به آنها اجازه میدهد بخشهایی از برنامه را در صورت لزوم بهشکل انتزاعی تعریف کنند. شاید یکی از بهترین یا بدترین ویژگیهای زبان پایتون در ارتباط با فضای سفید است. توررفتگیها و رفتن به خطوط دوم در زبان پایتون تنها برای خوانایی برنامه نیست.
فضای سفید یکی از اصلیترین بخشهای ترکیب نحوی پایتون به شمار میرود. مفسران زبان پایتون برنامههایی را که بهشکل درستی از دندانهگذاری بهمنظور نشان دادن جریان کنترل برنامه استفاده نکرده باشند رد میکنند.
پایتون 2 در مقابل پایتون 3
در حال حاضر، دو نسخه از زبان پایتون در اختیار برنامهنویسان قرار دارد. هریک از این دو نسخه ویژگیهای خاص خود را دارند. پایتون نسخه 2.X نسخه قدیمیتر است و پشتیبانی رسمی و عرضه بهروزرسانیها برای این نسخه تا سال 2020 ادامه خواهد داشت. حتی این احتمال وجود دارد که پس از این تاریخ نیز بهصورت غیررسمی از این نسخه پشتیبانی به عمل آید. نسخه 3.X نسخه جدیدتر است که یکسری ویژگیهای مفید و البته مهم دارد.
پایتون یک زبان برنامهنویسی سطح بالا است، در نتیجه برای برنامهنویسیهای سطح سیستمی همچون درایورنویسی یا هسته سیستم عاملها مناسب نیست
ویژگیهایی که در نسخه 2.x وجود ندارند. مفسران کارآمدتر و کنترلهای همروندی بهتر از جمله این ویژگیها هستند. اگر در گذشته برای نوشتن یک برنامه همروند در پایتون با مشکل روبهرو بودید، نسخه 3.x این مشکل شما را برطرف کرده است. با وجود این، پذیرش پایتون3 بهآرامی انجام گرفت، در نتیجه پشتیبانی از یکسری کتابخانههای بخش ثالث روند نسبتاً کندی داشته است. اغلب کتابخانههای پایتون تنها در نسخه 2 پشتیبانی میشوند که همین موضوع سوئیچ کردن به نسخه 3 را با دشواری همراه میسازد. اما در چند سال گذشته، تعداد کتابخانههایی که تنها در نسخه 2 پشتیبانی میشدند رو به افول نهاده است و اکثر این کتابخانهها با هر دو نسخه سازگاری دارند. در مقطع فعلی به دلایل مختلفی میتوان اشاره کرد که مهاجرت به پایتون 3 را توجیهپذیر میسازند.
آیا زبان پایتون بهلحاظ سرعت کند است؟
یکی از نکات رایجی که در ارتباط با پایتون وجود دارد مبحث کند بودن آن است. این موضوع تا حدودی صحت دارد. برنامههای نوشته شده با پایتون در مقایسه با برنامههایی که به زبانهای سی، سی پلاس پلاس و جاوا نوشته میشوند عمدتاً کندتر اجرا میشوند. اما سؤال این است که چرا این برنامهها کند هستند؟
بسیاری بر این باورند که مشکل کند بودن به دلیل آن است که محیطهای زمان اجرای پایتون مبتنی بر مفسر هستند و اگر از کامپایلر استفاده شده بود مشکل کندی برطرف میشد، اما این تمام ماجرا نیست.
پویایی ذاتی و انعطافپذیری اشیا در پایتون باعث شده است تا فرآیند بهینهسازی سرعت بهسختی امکانپذیر باشد. با وجود این، مبحث سرعت مشکل بزرگی نیست که پایتون را تحتالشعاع خود قرار دهد. بهواسطه آنکه راهکارهایی برای حل این مشکل وجود دارد. پایتون راهکارهای مختلفی برای بهینهسازی سرعت در اختیار دارد.
اگر گفته میشود که یک برنامه نوشته شده با پایتون کند است، بهمعنای آن نیست که این برنامه تا آخرین روزهای حیاتش کند خواهد بود. بیشتر برنامههای پایتون کند هستند، بهواسطه آنکه ممکن است از کتابخانههای استاندارد پایتون استفاده نکرده یا بهدرستی از ویژگیهای موجود در پایتون بهره نبرده باشند.
عملیات ریاضی و آماری میتوانند از طریق کتابخانههایی همچون NumPy و Pandas و محیط زمان اجرای PyPy سریعتر شوند و بهشکل قابل توجهی سرعت برنامههای پایتون را افزایش دهند. درنهایت اگر بهدنبال دادهکاوی داده هستید، بهتر است از زبان پایتون
غافل نشوید.