ترکیب نحوی و 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
• Pandas
• 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
• AnyCAD
• RCAM
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) که در بالا استفاده شد، به معنای وجود الگوریتمی است که وظیفهای را حل میکند که در زمان چند جملهای اجرا میشود، بهطوری که زمان اتمام کار به عنوان یک توابع چند جملهای در اندازه ورودی به الگوریتم متفاوت است (در مقابل، مثلاً زمان نمایی).
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟