پایتون یک زبان برنامهنویسی همه منظوره، پویای سطح بالا و تفسیر شده است که از رویکرد برنامهنویسی شیگرا برای توسعه برنامهها پشتیبانی میکند.
به گزارش شبکه مگ ترکیب نحوی وdynamic typing پایتون همراه با ماهیت تفسیری آن باعث شده تا پایتون برای اسکریپتنویسی و توسعه سریع برنامهها گزینه ایدهآلی باشد. پایتون از چند الگوی برنامهنویسی از جمله شیگرایی، دستوری، تابعی و روالی پشتیبانی میکند. به همین دلیل پایتون قرار است تنها در حوزه خاصی نظیر برنامهنویسی وب استفاده شود و به همین دلیل است که به عنوان زبان برنامهنویسی چند منظوره شناخته میشود، زیرا میتواند در ارتباط با وب، سازمانی، 3D CAD و غیره استفاده شود. در پایتون نیازی نیست تا نوع دادهای را همراه با تعریف متغیر استفاده کنید، زیرا نوعدهی در پایتون پویا است و بنابراین اگر بنویسیدa=10 به معنای آن است که یک مقدار صحیح را به یک متغیر صحیح اختصاص دادهاید. پایتون روند توسعه و اشکالزدایی را تسریع میبخشد، زیرا هیچ مرحله تلفیقی در توسعه پایتون وجود ندارد و به همین دلیل چرخه ویرایش-تست و اشکالزدایی سریع است.
پایتون به دلیل ماهیت همه منظورهای که دارد تقریباً در همه حوزههای توسعه نرمافزار قابل استفاده است. به همین دلیل است که ردپای پایتون در هر حوزه و فناوری نوظهوری را مشاهده میکنید. پایتون در مقایسه با سایر زبانهای برنامهنویسی سریعترین رشد را دارد و به همین دلیل است که امکان ساخت برنامههای مختلف با پایتون فراهم است. از جمله برنامههای مهمی که امکان ساخت آنها با پایتون وجود دارد به موارد زیر میتوان اشاره کرد:
1) برنامههای وب
ما میتوانیم از پایتون برای توسعه برنامههای وب استفاده کنیم. کتابخانههایی برای تعامل با پروتکلهای اینترنتی نظیرHTML وXML ،JSON، پردازش ایمیل، درخواستها،beautifulSoup ،Feedparser در دسترس توسعهدهندگان قرار دارد. پایتون چارچوبهای مفیدی را ارائه میدهد که برخی از آنها به شرح زیر هستند:
• چارچوبDjango وPyramid (در ارتباط با کاربردهای سنگین استفاده میشوند)
Flask وBottle (میکرو چارچوب)
• Plone وDjango CMS (مدیریت محتوای پیشرفته)
2) برنامههای رابط کاربری گرافیکی دسکتاپ
رابط کاربری گرافیکی مخففGraphical User Interface است که تعامل روان را برای هر برنامهای فراهم میکند. پایتون یک کتابخانهTk GUI برای توسعه رابط کاربری فراهم میکند. برخی از کتابخانههای محبوبGUI به شرح زیر هستند:
• Tkinter یاTk
• wxWidgetM
• Kivy (برای نوشتن برنامههای لمسی استفاده میشود)
• PyQt یاPyside
3) برنامههای کنسولمحور
برنامههای کنسولمحور بر مبنای خط فرمان یا پوسته اجرا میشوند. برنامههای کنسولمحور برنامههای کامپیوتری هستند که دستوراتی را برای اجرا فراخوانی میکنند. این نوع برنامهها قدمت زیادی در دنیای فناوری دارند و بر همین اساس پایتون قابلیتهای خوبی در ارتباط با ساخت این مدل از برنامهها ارائه میکند. وجود حلقه خواندن- ارزیابی و چاپ(REPL) سرنامRead-EvalPrint باعث شده تا پایتون ایدهآلترین زبان برای ساخت برنامههای خط فرمان باشد. پایتون کتابخانه یا ماژولهای رایگان زیادی ارائه میکند که ساخت برنامههای کنسولمحور را ساده میکند. دقت کنید که کتابخانههای ورودی/خروجی(IO) برای خواندن و نوشتن دستورات به برنامههای کنسول ضروری هستند. این کتابخانهها باعث میشوند تا روند تجزیه کردن آرگومانها و ساخت راهنما برای برنامههای کنسولمحور ساده شود. علاوه بر این، کتابخانههای پیشرفتهای وجود دارند که میتوانند برنامههای مستقل کنسول را توسعه دهند.
4) توسعه نرمافزار
پایتون در ارتباط با فرایند توسعه نرمافزارها نیز مفید است. پایتون به عنوان یک زبان پشتیبان عمل میکند و میتواند برای ساخت کنترل و مدیریت، آزمایش و غیره استفاده شود. از کتابخانههای کاربردی ارائه شده در این زمینه به موارد زیر میتوان اشاره کرد:
• ازSCons برای ایجاد کنترل استفاده میشود.
• Buildbot وApache Gumps در ارتباط با خودکارسازی مداوم و آزمایش استفاده میشود.
• Round یاTrac برای ردیابی اشکال و مدیریت پروژه استفاده میشود.
5) علمی و عددی
ما در عصر هوش مصنوعی زندگی میکنیم که در آن ماشینها میتوانند وظایف انسانی را انجام دهند. پایتون مناسبترین زبان برای هوش مصنوعی یا یادگیری ماشین است. پایتون را کتابخانههای کتابخانههای علمی و ریاضی متنوعی پشتیبانی میکنند که روند حل محاسبات پیچیده را ساده میکنند.
پیادهسازی الگوریتمهای یادگیری ماشین نیاز به محاسبه پیچیده ریاضی دارد. پایتون دارای کتابخانههای علمی و عددی قدرتمندی مانندNumpy ،Pandas ،Scipy ،Scikit-learn و غیره است. اگر دانش پایهای در مورد پایتون دارید باید به فکری یادگیری و کار با این کتابخانهها باشید. چند مورد از چارچوبهای محبوب مرتبط با یادگیری ماشین به شرح زیر هستند:
• SciPy
• Scikit-learn
• NumPy
• Matplotlib
6) برنامههای تجاری
برنامههای تجاری با برنامههای استاندارد متفاوت هستند. تجارت الکترونیکی و نرمافزارهای سازمانی(ERP) نمونهای از برنامههای تجاری هستند. این نوع برنامهها به قابلیتهای گسترده، مقیاسپذیری و خوانایی کدها نیاز دارند که پایتون همه این ویژگیها را فراهم میکند. Oddo مثالی از یک برنامهAll-in-one است که توسط پایتون نوشته شده و طیف وسیعی از قابلیتهای تجاری را ارائه میدهد. پایتون زیرساختی بهنامTryton را ارائه میکند که برای توسعه برنامههای تجاری استفاده میشود.
7) برنامههای صوتی یا تصویری
پایتون برای انجام چند وظیفه انعطافپذیر زیادی دارد و میتواند برای ساخت برنامههای چند رسانهای استفاده شود. برخی از برنامههای چندرسانهای که با استفاده از پایتون ساخته شدهاندTimPlayer ،cplay و غیره هستند. چند کتابخانه چندرسانهای نیز برای این زبان در دسترس قرار دارد که از آن جمله به موارد زیر میتوان اشاره کرد:
• Gstreamer
• Pyglet
• QT Phonon
8) برنامههای 3D CAD
طراحی به کمک کامپیوترCAD سرنامComputer-aided design برای طراحی مهندسی مرتبط با معماری استفاده میشود. پایتون را میتوان برای ساخت برنامههای سه بعدی که بخشی از یک سیستم را نشان میدهند به کار گرفت. پایتون با استفاده از کتابخانههای زیر قادر به ساخت برنامههای سه بعدیCAD است.
• Fandango (محبوب)
• CAMVOX
• HeeksCNC
9) برنامههای سازمانی
از پایتون میتوان برای ایجاد برنامههایی استفاده کرد که قرار است در یک سازمان استفاده شوند. از برنامههای بلادرنگ نوشته شده با پایتون باید بهOpenERP ،Tryton ،Picalo و غیره اشاره کرد.
10) برنامه پردازش تصویر
پایتون شامل کتابخانههای مختلفی است که در ارتباط با تصاویر استفاده میشوند. برنامههایی که اجازه میدهند تصاویر را بر مبنای نیاز کاری دستکاری کرد. از کتابخانههای پردازش تصویر مهم در پایتون به موارد زیر میتوان اشاره کرد:
• OpenCV
• Pillow
• SimpleITK
از موضوعات جالبی که کدنویسی با پایتون سهولت بیشتری در ارتباط با آن ها به همراه می آورد به شرح زیر است:
مشکلاتNP
مشکلP
در نظریه پیچیدگی محاسباتی، کلاسP یکی از پایهترین کلاسهای پیچیدگی است. این کلاس، شامل همه مسئلههای تصمیمی است که میتوانند با استفاده از پیچیدگی زمانی چندجملهای، با کمک ماشین تورینگ پایستار حل شوند. کبهام در قضیهاش ذکر میکند که کلاسP در واقع مشخصکننده این است که یک مسئله قابل حلشدن و پیگیری هست یا نه؛ با این وجود در عمل مسائلی هستند که در این دسته قرار ندارند و راهحلهای عملی دارند، و مسائلی هستند که در این دسته قرار دارند اما راه حل عملی ندارند.
به بیان دیگر، هر مسئلهای که بتوان در زمان چند جمله حل کرد به کلاسP تعلق دارد. بنابراین مرتبسازی سریع مسئلهای است در کلاسP، زیرا زمانش حداکثر مربع است. با این توصیف باید بگوییم مشکلی به کلاسP (زمان چند جملهای) نسبت داده میشود که دستکم یک الگوریتم برای حل مسئله وجود داشته باشد، به این ترتیب که تعداد مراحل الگوریتم توسط یک چند جملهای درn محدود میشود، جایی کهn طول ورودی است.
یک مسئلهP (که زمان حل آن با یک چند جملهای محدود شده) نیز همیشهNP است. اگر مسئلهایNP تشخیص داده شود و راهحلی برای مسئله به نحوی شناخته شده در دسترس باشد، بیانگر این موضوع است که درستی راهحل را میتوان همیشه به یک تأییدP (زمان چند جملهای) کاهش داد. اگرP وNP با هم برابر نباشند، حل مشکلاتNP (در بدترین حالت) قرار دارند و نیازمند جستجوی جامعی است.
مشکلNP
مسائلی که ممکن است در زمان چند جملهای حل نشوند، اما اگر راهحلی برای آنها داشته باشیم، میتوان درستی آنرا در زمان چند جملهای بررسی کرد،NP هستند. بهطور مثال، مسئله پیدا کردن یک تور کمینه میان چند شهرNP است، زیرا درست است که خودش در زمان نمایی حل میشود، اما اگر یک تور داشته باشیم، این امکان فراهم است که در زمان مربعی آنرا ارزیابی کنیم که درست است. بنابراین مرتبسازی سریع هر در کلاسP و هم در کلاسNP امکانپذیر است، زیرا هم خودش در زمان مربع حل میشود و هم راهحلش در زمان مربعی ارزیابی میشود. بنابراین مشکلی را به کلاسNP تخصیص میدهیم که راهحلی در زمان چند جملهای توسط ماشین تورینگ غیرمشخص برای آن ارائه شده باشد. دستگاه تورین غیر قطعی(NTM) سرنامnondeterministic Turing machine یک مدل نظریه محاسباتی است که قوانین حاکم بر آن در برخی شرایط خاص بیش از یک اقدام ممکن را مشخص میکنند. یعنی حالت بعدیNTM بهطور قاطع با عملکرد و نماد فعلی که مشاهده میکنید تعیین نمیشود (برخلاف دستگاه تعیینکننده تورینگ).
NP- کامل
یک مشکلNP-کامل در هر دو گروهNP (در زمان چند جملهای غیرقطعی تایید شده) وNP-hard (هر مسئلهNP را میتوان به این مشکل ترجمه کرد). در مقالهای کهKarp در سال 1972 منتشر کرد نشان داد که 21 مسئله محاسباتی ترکیبی حل نشدنی همهNP کامل هستند. فهرست زیر شامل برخی از مشکلات شناخته شدهای است که اگر هنگامی که به عنوان مشکلات تصمیمگیری بیان شوندNP-کامل هستند.
• مسئله صدقپذیری دودویی(SAT) سرنام(Boolean satisfiability problem)
• مشکل کوله پشتی(Knapsack)
• مشکل مسیر همیلتونین(Hamiltonian)
• مشکل فروشنده دوره گرد (نسخه تصمیم) سرنامTravelling salesman problem
• مشکل ایزومورفیسم زیرگراف(Subgraph isomorphism)
• مسئله جمع زیرمجموعه(Subset sum)
• مشکل کلیک(Clique)
• مشکل پوشش ورتکس(Vertex cover)
• مشکل مجموعه مستقل(Independent set)
• مشکل مجموعه غالب(Dominating set)
• مشکل رنگآمیزی نمودار(Graph coloring)
NP سخت
مسئلهایNP-سخت است که اگر الگوریتمی برای حل آن بتواند به الگوریتمی برای حل هر مسئلهNP (زمان چند جمله ای غیرمشخص) تبدیل شود. بنابراینNP-سخت به این معنا است که “حداقل سختی برابر با هر مسئلهNP ” باشد، اگرچه ممکن است در عمل سختتر باشد. نشان داده اینکه یک مسئلهNP است خیلی سادهتر از آن است که نشان دهیم مسئله یکNP-سخت است.
مسئلهP در مقابلNP
مسئلهP در مقابلNP یک مشکل بزرگ لاینحل در علوم کامپیوتر است. همواره این پرسش مطرح میشود که آیا هر مسئلهای که بتوان به سرعت راهحل آنرا تایید کرد با همان سرعت حل میشود؟ مسئله فوق یکی از هفت مسئله هزاره است که توسط موسسهClay Mathematics انتخاب شده، بهطوری که برای ارائه حلی درست برای هر یک از آنها جایزه یک میلیون دلاری تعیین شده است.
اصطلاح غیررسمی سریع(quickly) که در بالا استفاده شد، به معنای وجود الگوریتمی است که وظیفهای را حل میکند که در زمان چند جملهای اجرا میشود، بهطوری که زمان اتمام کار به عنوان یک توابع چند جملهای در اندازه ورودی به الگوریتم متفاوت است (در مقابل، مثلاً زمان نمایی).