ویژگی‌ های زبان پایتون

پایتون یک زبان برنامه‌نویسی رایگان، متن باز (Open Source) و با بیانی کامل‌تر، آزاد است که هم‌‌اکنون (یعنی از نسخه‌ ۲٫۱ و جدیدتر) پروانه‌ آن توسط «بنیاد نرم‌افزار پایتون» PSF اداره می‌گردد. پروانه‌ پایتون سازگار با پروانه‌ GPL3 است، با این حال به برنامه‌نویس این اجازه را می‌دهد که بتواند برنامه‌ای با سورس بسته (Closed Source) تولید نماید.

زبان پایتون از اجزای بسته نرم‌افزاری LAMP نیز به شمار می‌رود. این بسته عبارت است از: Linux ~ سیستم عامل / Apache ~ وب سرور / MySQL یا MariaDB ~ پایگاه‌ داده / Python یا Perl یا PHP ~ زبان برنامه‌نویسی.

این زبان خیلی پیش‌تر از آنکه حتی Eric Raymond و Bruce Perens از Open Source صحبت کنند، متن باز بوده است.

پایتون یک زبان برنامه‌نویسی همه منظوره (General-Purpose) است به این معنی که می‌توان از آن در توسعه طیف گسترده‌ای از انواع برنامه‌ها در حوزه‌های نرم‌افزاری گوناگون بهره برد؛ از جمله در توسعه برنامه‌های تحت وب و برنامه‌هایی با قابلیت «واسط گرافیکی کاربر» (GUI).

پایتون یک زبان برنامه‌نویسی به همراه مجموعه‌ بزرگی از قابلیت‌های از پیش آماده و قابل حمل است که به عنوان کتابخانه‌ استاندارد آن شناخته می‌شود. همچنین در کنار این کتابخانه‌ می‌توان از طیف بسیار وسیعی از کتابخانه‌های شخص ثالث (Third-Party) پایتون  نیز بهره برد. کتابخانه‌های شخص ثالث ابزارهای مفیدی را در امور فروانی همچون: برنامه‌نویسی علمی ~ NumPy ،SciPy / پردازش زبان‌های طبیعی ~ NLTK / ارتباط درگاه سریال ~ PySerial / ایجاد بازی ~ PyGame ،Pyglet ،PyOpenGL ،PySoy / هوش مصنوعی ~ PyBrain / ایجاد وب سایت ~ Django ،Flask ،Bottle ،CherryPy / پردازش تصویر ~ PIL/Pillow ،PythonMagick / واسط گرافیکی کاربر ~ PyGtk ،PyQt ،WxPython / کار با اسناد rdflib ~ pdf / رمزنگاری ~ PyCrypto ،pyOpenSSL ،cryptography و بسیاری دیگر… که مدام در حال توسعه هستند و بر تعداد و تنوع آن‌ها نیز افزوده می‌شود را در اختیار برنامه‌نویسان پایتون قرار می‌دهند.

پایتون یک زبان برنامه‌نویسی پویا (Dynamic) بوده و نیز از قابلیت مدیریت خودکار حافظه برخوردار است. این زبان شباهت‌هایی با TCL ،Perl ،Ruby ،PHP یا دیگر زبان‌های برنامه‌نویسی پویا دارد. در این نوع زبان‌ها بر‌خلاف زبان‌های ایستا (Static) مانند C++ ،C و Java نیازی به تعریف صریح نوع متغیرها  (Variables) نیست و همچنین نوع متغیر در طول برنامه قابل تغییر است. در زبان‌های پویا متغیرها از خود نوعی ندارند و تصمیم گیری برای تخصیص نوع در «زمان اجرا» (RunTime) انجام می‌پذیرد.

بر خلاف زبان C، در پایتون اختصاص و آزاد‌سازی حافظه (Memory) به صورت خودکار انجام می‌شود. پایتون برای آزاد‌سازی حافظه از دو روش «شمارش ارجاع» (Reference Counting) و «زباله روبی»  (Garbage Collection) بهره می‌گیرد. (البته فراموش نشود که صحبت در مورد پیاده‌سازی CPython است)

با اینکه پایتون یک زبان پویاست ولی در عین حال یک زبان «وابسته شدید به نوع» (Strongly Typed) نیز می‌باشد. در این نوع زبان‌ها (به مانند Java) تغییر ناگهانی و خودکار نوع داده (یا شی) انجام نمی‌شود؛ به عنوان نمونه چنانچه در پایتون عمل جمع بین یک نوع داده عددی مانند ۳ و یک نوع داده غیر عددی مانند “۷” صورت گیرد، یک Exception یا استثنای TypeError گزارش می‌گردد. در مقابل، زبان‌های «وابسته ضعیف به نوع» (Weak Typed) قرار دارند؛ در این زبان‌ها (به مانند Perl) نوع بر حسب موقعیت به صورت خودکار تغییر داده می‌شوند. در این مورد زبان‌های برنامه‌نویسی رفتارهای متفاوتی دارند،‌ به عنوان نمونه حاصل عبارت “۷” + ۳ در زبان Perl با تبدیل (Convert)‌ خودکار نوع داده غیر عددی “۷” به عدد (۷)، مقدار ۱۰ محاسبه می‌گردد.


نکته

استثنا‌ در واقع وضعیت یا خطایی (Error) است که در برنامه پیش‌بینی شده و بروز آن‌ به مانند یک اعتراض گزارش می‌شود. از طرفی در برنامه برای هر اعتراض، چگونگی رسیدگی به آن نیز تعریف می‌شود.

پایتون یک زبان برنامه‌نویسی سطح بالا (High-Level) به مانند C ،Ruby ،PHP و Java است که به وسیله‌ آن عمل برنامه‌نویسی به آسانی و با سرعتی بالا انجام می‌پذیرد و بر‌خلاف زبان برنامه‌نویسی سطح پایینی (Low-Level) مانند Assembly، برنامه‌نویس را درگیر مسایل خاص موجود در این سطح به مانند کار با ثبات‌ها (Registers)، آدرس‌های حافظه و غیره… نمی‌سازد.


نکته
بر اساس یک دسته‌بندی رایج ، زبان‌های برنامه‌نویسی را می‌توان به نسبت درگیر ساختن برنامه‌نویس با مفاهیم سخت‌افزاری یا میزان سطح انتزاع (Abstraction) برنامه‌نویس از سخت‌افزار، در دو سطح دسته‌بندی نمود: ۱. پایین ~ زبان ماشین و Assembly (اسمبلی) ۲. بالا ~ Java ،C++ ،C و غیره…


توجه

میزان انتزاع تمام زبان‌های برنامه‌نویسی سطح بالا به یک نسبت نمی‌باشد؛ به عنوان نمونه میزان انتزاع زبان پایتون بیشتر از Java و سطح انتزاع Java نیز بسیار بیشتر از زبان C است:

Machine < Assembly < C < C++ < Java < Python


نکته

تنها زبان قابل فهم و اجرا برای هر ماشینی (یا رایانه‌ای)، زبان ماشین (Machine Language) خاص آن است و تمامی برنامه‌های نوشته شده در هر سطحی از انتزاع که باشند، پیش از اجرا می‌بایست به این زبان ترجمه شوند. بدیهی است که نیاز این پردازش اضافی به نسبت از سرعت اجرای برنامه می‌کاهد. عمل ترجمه برای کدهای اسمبلی توسط اسمبلر (Assembler) و برای باقی زبان‌ها توسط کامپایلر (Compiler) یا مفسر (Interpreter) انجام می‌پذیرد.

پایتون یک زبان برنامه‌نویسی چند‌ الگویی (Multi-Paradigm) است و برنامه‌نویس را مجبور به رعایت الگوی خاصی نمی‌کند. این زبان از الگوهای: دستوری (Imperative) یا رویه‌ای (Procedural)، تابعی (Functional) و شی‌گرایی (Object-Oriented) پشتیبانی می‌کند؛ البته همانظور که گفته شد نمی‌توان پایتون را به صورت خالص (Pure) متعلق به هر یک از این الگوها دانست .

جدا از پشتیبانی الگوی برنامه‌نویسی شی‌گرا، ساختار پایتون به صورت کامل شی‌گراست و هر چیزی در این زبان یک شی (Object) است؛ در آینده بیشتر در این مورد صحبت خواهیم کرد.

پایتون (پیاده‌سازی CPython) به عنوان یک زبان تفسیر‌شده (Interpreted) شناخته می‌شود. با یک تعریف کلی در این نوع زبان‌ها کار خواندن سورس کد برنامه، ترجمه به زبان ماشین و در نهایت اجرای آن توسط یک مفسر انجام می‌گیرد. در پایتون عمل ترجمه و اجرای سورس کد را می‌توان در دو مرحله متوالی خلاصه نمود:

۱- کامپایل سورس کد به بایت‌کد (ByteCode)

۲- تفسیر بایت‌کد به زبان ماشین و اجرای آن

به این صورت که ابتدا سورس کد برنامه‌ به یک زبان میانی نزدیک به زبان ماشین با نام بایت‌کد ترجمه می‌شود و سپس بایت‌کد حاصل به ماشین مجازی (Virtual Machine) – به عنوان موتور زمان‌اجرای پایتون – فرستاده و توسط آن تفسیر و اجرا می‌گردد.


توجه

با این که پایتون (پیاده‌سازی CPython) به عنوان یک زبان تفسیر‌شده شناخته می‌شود ولی در زمان‌اجرا (RunTime) برای ترجمه‌ سورس کد به بایت‌کد از یک کامپایلر استفاده می‌کند.

تفاوت عملکرد کامپایلر و مفسر

به صورت خیلی کلی، کوتاه و ساده:

یک کامپایلر (در زبان‌های کامپایل‌شده) تمامی سطرهای سورس کد برنامه را به صورت یکجا خوانده و سپس با ساخت یک فایل جدید و مستقل از سورس کد با نام «کد مقصد یا آبجکت کد» (Object Code) یا فایل اجرایی (Executable) عمل ترجمه به زبان ماشین را پایان می‌بخشد. برنامه حاصل از کامپایلر توانایی هر چند بار اجرا در رایانه مقصد، بدون نیاز به کامپایل دوباره را دارد، اما فاقد حمل‌پذیری بوده و کاربر نهایی نیز به هیچ عنوان توانایی دسترسی به سورس کد برنامه و تغییر یا ویرایش آن را نخواهد داشت. اما یک مفسر (در زبان‌های تفسیر‌شده) سورس کد برنامه را به صورت سطر به سطر می‌خواند و هر سطر را به صورت جداگانه به زبان ماشین ترجمه و سپس بلافاصله آن را اجرا می‌کند. به این صورت که هنگامی یک سطر در حال اجراست در همان لحظه سطر بعدی در حال ترجمه به زبان ماشین می‌باشد. برنامه‌های نوشته شده با زبان‌های برنامه‌نویسی تفسیر‌شده برای هر بار اجرا در رایانه هدف نیاز به تفسیر دوباره دارند. این تفاوت عملکرد گرچه باعث کاهش سرعت اجرای برنامه‌های تفسیر‌شده نسبت به برنامه‌های کامپایل‌شده می‌شود ولی خواندن سطر به سطر کدها در مفسر علاوه بر قابلیت تشخیص خطای بهتر، این امکان را بوجود می‌آورد که هر کاربری بتواند حتی در زمان اجرای برنامه سورس کد را ویرایش و تغییر دهد؛ این دسته از زبان‌ها در مواقعی که پیوسته نیاز به افزودن ویژگی‌های متفاوت به برنامه است بسیار مورد توجه قرار گرفته‌اند.

توجه

ماشین مجازی پایتون (CPython VM) به صورت یک حلقه تکرار است که دستورات بایت‌کد را یکی یکی می‌خواند، به زبان ماشین تفسیر و بلافاصله اجرا می‌کند.

پایتون یک زبان برنامه‌نویسی قابل‌حمل (Portable) است. می‌توان گفت سورس کد برنامه‌ای به این زبان قابلیت اجرا در هر رایانه‌ای را دارد. بایت‌کد پایتون شبیه به زبان ماشین است ولی با این تفاوت که مخصوص هیچ ماشین (یا رایانه) خاصی نیست. در مقابل،‌ وقتی سورس کد برنامه‌ای توسط کامپایلر به زبان ماشین ترجمه می‌شود، نتیجه آن فایلی است که تنها در ماشین‌هایی که این کد برای آن‌ها (متناسب با معماری پردازنده) ترجمه شده است، قابل اجرا می‌باشد ولی بایت‌کد پایتون به کمک ماشین مجازی خود این توانایی را دارد که در هر ماشینی اجرا گردد.

نکته

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

ماشین مجازی، بسته‌ایست نرم‌افزاری که قابلیت نصب بر روی انواع ماشین‌ها را داراست و وظیفه‌ آن ایجاد یک ماشین مجزا (بر روی ماشین مقصد) برای اجرای مستقل کدها (بایت‌کدها) می‌باشد. به این نوع ماشین مجازی «ماشین مجازی پردازش»  گفته می‌شود.

بر همین اساس، هم اکنون سورس کد یک برنامه به زبان پایتون بدون نیاز به هیچ تغییری در تمام سیستم‌های عامل‌ مطرح قابل اجراست.

پایتون یک زبان برنامه‌نویسی توسعه‌پذیر (Extensible) است. کدهای نوشته شده با پایتون را می‌توان به دیگر سورس کدهای این زبان افزود و همچنین می‌توان از کتابخانه‌ها و کدهای نوشته شده با دیگر زبان‌های برنامه‌نویسی در میان کدهای پایتون استفاده کرد (مانند C و ++C در پیاده‌سازی CPython یا Java در پیاده‌سازی Jython).

پایتون دارای دستور زبانی تمیز و خوانایی (Readability) بالای کد است. خوانایی در طراحی پایتون مورد تاکید بوده و در کنار شی‌گرایی از مهم‌ترین ویژگی‌های یک کد به جهت استفاده مجدد می‌باشد. پایتون به مانند زبان ABC از روش «تو‌رفتگی» بوسیله‌ فضاهای خالی برای بلاک‌بندی  استفاده می‌کند. در پایتون اجباری به استفاده از نقطه ویرگول (Semicolon) ; و برخی پرانتز گذاری‌ها نمی‌باشد و البته وجود انواع داده (Data Types) – البته به بیانی درست‌تر «انواع شی» – متنوع و نیز پویایی پایتون موجب کمتر شدن حجم کد‌نویسی و صرفه‌جویی در زمان توسعه نسبت به زبان‌هایی به مانند C++ ،C و حتی Java می‌شود. تحقیقات نشان می‌دهند: کاری که یک برنامه‌نویس پایتون می‌تواند در مدت زمان دو ماه به انجام برساند، دو برنامه‌نویس ++C در مدت یک سال قادر به تکمیل آن نخواهند بود!

پایتون یک زبان حساس به حرف (Case Sensitive) است. در این نوع زبان‌ها (مانند C ،C++ ،Java ،Perl و غیره…) بین حروف کوچک (Lowercase) و بزرگ (Uppercase) به مانند a و A تفاوت وجود دارد. با توجه به این موضوع، مفسر پایتون بین کلمات True ،true و TRUE تمایز می‌گذارد.

ویژگی‌ های زبان پایتون
۵ (۱۰۰%) ۱ رای

(396 نوشته)

C# Programmer , Web Design And Developer , MVC , ASP.NET

فکر شما چیست؟

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

حاصل جمع اعداد را وارد کنید : *