نکات مقاله نویسی(article writing)

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

نکات مهم در انتخاب عنوان مقاله

معیارهای نویسندگی

کمیته بین المللی سردبیران مجلات پزشکی (ICMJE  ) ، نویسنده مقاله را چنین تعریف می‌کند: «کسی که در یک مقاله منتشر شده سهمی ‌اساسی از لحاظ فکری داشته باشد».
این کمیته موارد زیر را به عنوان معیارهای نویسندگی (authorship criteria  ) ذکر می‌کند:
داشتن سهمی ‌اساسی در ایده و طرح مطالعه یا جمع‌آوری داده‌ها یا تجزیه و تحلیل داده‌ها
تهیه دست نوشته مقاله یا بازنگری منتقدانه مقاله از لحاظ محتویات مهم
تأیید نهایی نسخه‌ای که قرار است چاپ شود.
این معیارها به نام معیارهای ونکوور (Vancouver criteria  ) معروف است. توجه کنید که وجود هر سه معیار به صورت همزمان ضروری است. در معیار اول تنها وجود یکی از سه مورد مذکور مشتمل بر مشارکت در ایده یا جمع‌آوری داده‌ها یا آنالیز داده‌ها کفایت می‌کند. اما عملاً در بسیاری از مقالات، لحاظ کردن این معیارها ساده نیست. مثلا در مطالعات چند مرکزی (multi-center  ) که هر مرکز بخشی از اجرای طرح را عهده‌دار است تهیه فهرست نویسندگان براساس معیارهای ونکوور دشوار به نظر می‌رسد.
برخی مجلات مانند Journal of American Medical Association- JAMA لازم می‌دانند که نویسندگان فرمهای مخصوصی را که در آنها معیارهای ونکوور مطرح شده است پر کنند تا بدین ترتیب در مورد احراز این معیارها توسط هر یک از نویسندگان اطمینان حاصل شود. بعضی دیگر از مجلات مانند BMJ -British Medical Journl و Lancet از هر یک از نویسندگان میخواهند که به طور دقیق سهم خود را در مقاله مشخص نمایند. اخیراً بنحو روز افزونی در مطالعات چند‌مرکزی نویسندگی مقاله به یک گروه نسبت داده می‌شود. در چنین مطالعاتی نیز آن دسته از افراد گروه که نامشان به عنوان نویسندگان مقاله ذکر می‌شود، باید معیارهای ونکوور را دارا باشند.
لازم به تأکید است که تنها فراهم کردن منابع مالی و امکانات مطالعه، جمع آوری داده‌ها یا نظارت کلی بر گروه تحقیقاتی، توجیهی برای نویسنده بودن نمی‌باشد.

ترتیب نویسندگان

نویسنده اول معمولاً همان کسی است که نسخه اولیه مقاله را البته با مشورت با سایر نویسندگان می‌نویسد. نویسنده اول همچنین مسؤول تجزیه و تحلیل داده‌ها یا نظارت بر آن است و باید از درستی داده‌ها و تفسیر نتایج اطمینان حاصل کند. نویسنده آخر معمولاً محقق ارشد گروه است (برخلاف آنچه در کشور ما معمول است) و غالباً همان کسی است که ایده اولیه مطالعه را مطرح کرده است. در فاصله بین نام نویسنده اول و آخر، نام سایر نویسندگان به ترتیب کاهش سهمشان ذکر می‌شود.
لازم به ذکر است که یک قانون فراگیر یا توافق عمومی در مورد ترتیب نام نویسنده‌ها وجود ندارد. به عنوان مثال در برخی مقالات، نویسنده آخر ممکن است کمترین نقش را داشته باشد و در بعضی مقالات نویسنده آخر ممکن است محقق ارشد گروه باشد. لذا همیشه از روی ترتیب نام نویسندگان نمی‌توان به سهم آنها در مقاله پی برد.
به هر حال ترتیب نام نویسندگان باید حاصل تصمیم جمعی آنها باشد. یکی از نویسندگان نیز باید به عنوان نویسنده مسؤول مکاتبات مشخص شود. این نویسنده، مسؤول ارتباط با مجله، پاسخگویی به درخواست‌های مربوط به نسخه چاپی مقاله و ارتباط با سایر پژوهشگران می‌باشد.
هر کدام از نویسندگان صرفنظر از ترتیب اسامی ‌باید قادر به ارائه نتایج، دفاع از تفسیر آن و بحث پیرامون محدودیت‌های مطالعه باشند. در واقع یکایک نویسندگان به لحاظ علمی ‌و اخلاقی در مورد محتوای مقاله مسؤول هستند.
یک روش عادلانه، تعیین سهم هر یک از نویسندگان (author’s contribution  ) در مقاله به صورت واضح و مشخص است. بسیاری از مجلات فرمی را برای نویسنده مسؤول مکاتبات می‌فرستند که درآن باید نقش هر یک از نویسندگان در مراحل مختلف انجام مطالعه و آماده‌سازی مقاله تعیین گردد. بدین ترتیب مشخص می‌شود که کدام نویسنده یا نویسندگان در طراحی مطالعه، جمع آوری داده‌ها، آنالیز آماری، تفسیر داده‌ها، آماده سازی دست نوشته مقاله، مرور متون و… نقش داشته‌اند. لذا در بسیاری از مقالات قسمتی تحت عنوان author’s contribution نیز به چشم میخورد.

چکیده

واژگان کلیدی

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

مقدمه

روشها (Methods)

در بخش مواد و روشها باید به سوالات زیر پاسخ داده شود
چه نوع مطالعه ای انجام شده (study design)
چه کسانی و در چه شرایطی مورد مطالعه قرار گرفته اند (subjects and setting)
آنچه مورد اندازه گیری قرار گرفته (measurements )
چگونه داده ها مورد تجزیه و تحلیل قرار گرفته اند (analysis)
بخش روشها و یافته ها با هم ارتباطی متقابل دارند. بدین ترتیب که اگر مطلبی را در بخش یافته ها ذکر کنید باید در بخش روشها توضیح داده باشید که چگونه آن را اندازه گرفته اید. به همین ترتیب، اگر مطلبی را در بخش روشها بیاورید، یافته های مربوط به آن را باید در بخش یافته ها ارائه کنید
در بخش  روشها برای بیان سازمان یافته تر مطالب میتوانید از عناوین مجزا استفاده کنید
بیشتر بدانید ...

آموزش ساده Django

آموزش ساده Django

Django چیست؟

Django یک فریم ورک توسعه وب متن باز می باشد که به افتخار یکی از بزرگترین موزیسین های قرن ۲۱ – Django Reinhrdt نام گذاری شده است. اساس Django یک قانون ساده است -Don’t Repeat Yourself یا خودت را تکرار نکن – این قانون تماما در رابطه با عدم تکرار کدها و ساده بودن انها است که آن را برای خوانده شدن راحت تر می نماید.


توسعه شبکه، به معنای واقعی، تمرین توسعه و رسیدگی به صفحات web و برنامه های شبکه ای است.

چه چیزی این framework را این قدر فوق العاده میکند؟ چرا مردم آن را استفاده میکنند؟ یکی از ویژگی های بارز Django ساخته شدن آن بر پایه Python است، که زبان برنامه نویسی فوق العاده دینامیک و پویایی است. با توجه به این نکته، Django یک کدنویسی با کیفیت که وجه مهمی از این framework می باشد را ارائه میدهد. Django ویژگی های جذاب دیگری همچون یک مدیریت تعمالی خودکار یا نقش نگاری ارتباطی اشیاء (ORM).


چرا باید Django را انتخاب کنیم؟

در ادامه به برخی از ویژگی هایی که این فریم ورک را به یک توسعه دهنده شبکه محبوب تبدیل می کند میپردازیم:
سرعت: Django توسعه سریع به وسیله یک طراحی ساده فراهم می سازد. Djano به طور غیرقابل وصفی سریع، رایگان است و با توجه به متن باز بودن میتواند به توسعه دهندگان در کامل نمودن برنامه هایشان به سرعت هرچه تمام تر کمک نماید. Django بسیاری از مشکلات توسعه وب را در چشم به هم زدنی بدون کوچکترین زحمتی برطرف میکند. ایده بازاستفاده از کد ها برای هر توسعه دهنده وبی بسیار حیاتی است.

 پکیج ها و بسته های بی شمار:

دسته اجزا و کتابخانه های ارائه شده توسط Django در بالابردن سرعت تمام فرایند توسعه شبکه کمک میکند. به این معنی که نیازی به دانلود و نصب جداگانه کتابخانه ها و بسته نیست و Django تمام انچه را که برای توسعه وب نیاز است در خود دارد. از دیگر بسته هایی که Django در خود دارد میتوان به : User Authentication, Site Maps and Content Administration و موارد  بسیار دیگری اشاره نمود.

امنیت:

Django بر اساس پایتون ساخته شده است، که به همین دلیل با جامعه فعال Python web community بسیار در ارتباط است. این موضوع به توسعه دهندگان کمک میکند تا از بسیاری از اشتباهات ساده امنیتی مانند: cross-site scripting, SQL injection, clickjacking and CSRF پرهیز کنند. Django هم چنین یک سیستم مدیریت کاربر که امکان مدیریت بهتر کاربران را میدهد، را ارائه میکند.

مقیاس پذیری:

با توجه به نحوه رشد تکنولوژی، نوشتن کدهای مقیاس پذیر و اجرا نمودن آنها بسیار حائز اهمیت است. کدهای Django بسیار مقیاس پذیر هستند. بسیار از سایت های با ارزش  همچون Instagram از Django برای فعالیت های Back-end خود استفاده میکنند. Django یک فریم ورک مناسب برای رشد وبسایت شما و افزودن قابلیت های دیگر به آن، ارائه میکند.

کارآیی:

Djangoتوانایی ساخت هر جیزی را دارا است – از مدیریت محتوای سیستم تا پلیتفرم های محاسبات مهندسی شبکه های مجازی. بنابراین Django در تمام زمینه ها کارایی دارد.


معماری Django:

جنگو از معماری MVC-MVT پیروی می نماید.

MVC کوتاه شده عبارت Model View Controller است.

MVC برای توسعه وب جایی که کد به بخش های متنوع تقسیم میشود استفاده میشود. در اینجا ( عکس بالا) ما سه بخش داریم:

  1. Model: در واقع این بخش، back-end می باشد. محلی که پایگاه داده تعریف میگردد. Model برای مرتب سازی و نگاهداری داده ها می باشد.

  2. Views: این بخش کاملا در ارتباط با ارائه می باشد، هرآنچه که کاربر میتواند ببیند به عنوان View خوانده شده و هیچ گونه آگاهی نسبت به Back-end وجود ندارد. در قالب های تعریف شده Django، Views به فرمت html هستند.

  3. Controller: می توان این بخش را به عنوان حلقه ارتباطی دانست. در واقع یک منطق تجاری است که میان Model و View تعامل ایجاد می کند.

MVT کوتاه شده عبارت Model View Template است. 

در MVT، هر رابط کاربری یک قالب از پیش تعریف شده دارد. برای درک بهتر به مثال زیر توجه کنید: تصور کنید میخواهید چندین فرم استاتیک HTML مانند Greetings user1, Greetings user2 و …. را ایجاد نمائید. با قالب، شما تنها یک فایل که hello را همراه با نام متغیر چاپ میکند، خواهید داشت. حال این متغیر به وسیله کمی منطق جایگزین خواهد شد. این زیبایی قالب است، باز استفاده کدها به نهایت کارایی خود در این بخش رسیده اند.

در مورد MVT، Django دارای یک ویژگی درونی است که مسئولیت بخش Controller را برعهده دارد.

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

در تصویر بالا، قالب در واقع بخش Front-end است که با View و Model به عنوان back-end در تعامل است. سپس View به Model و قالب ها دست می یابد و آن را  بر روی یک URL می انگارد. پس از آن، Django نقش یک Controller را ایفا کرده و آن را به کاربر نمایش خواهد داد.


نصب Django

همانطور که پیشتر اشاره شد، Django فریم ورکی از Python است. برای نصب Python بر روی سیستم خود به آدرس: https://www.python.org/downloads/ بروید.

برای نصب Django، باید مفهوم pip را بدانیم که یک package manager برای Python است و نصب و لغو نصب کلیه پکیج های Python ( همچنین Django) را بسیار ساده تر خواهد نمود. برای سادگی، از pip استفاده خواهیم نمود تا package های Python را نصب کنیم.

Install virtualenv and virtualenvwrapper

virtualenv and virtualenvwrapper  are packages that provide a dedicated environment for all Django project you create. This is not mandatory but considered as a best practice and will save you time in the future. Simply type:

pip install virtualenvwrapper-win

حال شما به روش زیر میتوانید یک محیط مجازی برای تمام پروژه های خود ایجاد نمائید:

mkvirtualenv project1

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

pip install django

این فرمان، تمام آخرین ورژن بسته های Django را دانلود و نصب مینماید.


اولین برنامه شبکه خود در Django

ابتدا نیاز است که یک پروژه ساخته شود. به آدرسی که میخواهید پروژه شما در آن ساخته شود رفته و دستورات زیر را وارد نمائید:

django-admin startproject myproject

پروژه شما ساخته شده است! حال مسیرهایی که یافته اید را بررسی خواهیم کرد:

manage.py – که یک ابزار خط دستور است و اجازه تعامل با این پروژه را به روش های مختلف میدهد.

urls.py – که controller اصلی است و عمل mapping را برروی سایت شما انجام میدهد.

init.py – به پایتون اعلام میکند که با این پروژه باید شبیه به یک بسته پایتونی برخورد شود.

myproject/ – در واثع بسته اصلی پایتون برای پروژه شما است. از این میتوان برای انتقال هرآنچه که شما برای ساخت برنامه خود نیاز دارید استفاده نمود.

wsgi.py – به عنوان یک نقطه ورودی برای WSGI متناسب یا سرورهای شبکه شناخته میشود.

setting.py – فایلی است برای مدیریت کلیه تنظیمات پروژه شما.

توجه داشته باشید که برای ساخت پروژه خود، تطمینان حاصل کنید که در آدرس یکسان با manage.py قرار دارید و سپس دستور زیر را تایپ نمائید:

python manage.py startapp webapp

حال اگر به مسیر ‘webapp’ نگاه کنیم، چند مورد اضافه نسبت به project1 اصلی خواهیم یافت. که شامل model test، که به پایگاه داده back-end شما مربوط است، خواهد بود.

نکته بعدی در آموزش Django، نیاز به انتقال برنامه هایتان به داخل تنظیمات پروژه اتان به صورت دستی است. به همین منظور، myproject/settings.py خود را باز نموده و برنامه خود را اضافه نمائید.

INSTALLED_APPS = (

    ‘webapp’,

    ‘django.contrib.admin’,

    ‘django.contrib.auth’,

    ‘django.contrib.contenttypes’,

    ‘django.contrib.sessions’,

    ‘django.contrib.messages’,

    ‘django.contrib.staticfiles’,


پس از نصب برنامه، ما نیاز داریم که یک view ایجاد نمائیم. webapp/views.py خود را باز نموده و دستور زیر را در آن قرار دهید:

from django.http import HttpResponse

def index(request):

    return HttpResponse(“<H2>HEY! Welcome to Dabirbartar! </H2>”)

در کد بالا، من یک view ایجاد نموده ام که که پاسخ http را باز میگرداند. حال ما نیاز داریم تا این view را به یک url تخصیص دهیم. ما نیازمند یک URLconf در برنامه های خود نیاز داریم. بنابراین، آن را درون webapp خود ایجاد میکنیم. در webapp/urls.py کدهای زیر را اضافه مینمائیم:

from django.conf.urls import url

from . import views

urlpatterns = [

url(r’^$’, views.index, name=’index’),

در کد بالا، من یک view که فهرست (در فایل views.py تعریف شده است) را باز میگرداند، را ارجاع داده ام. الگوی url به شکل معمول خود است که ^ به معنای شروع رشته و $ برای پایان آن است.

قدم بعدی ارجاع دادن ریشه URLconf در ماژول webapp.urls است. خطوط کد زیر را در فایل myproject/urls.py بنویسید:

from django.conf.urls import include, url

from django.contrib import admin

urlpatterns = [

    url(r’^admin/’, include(admin.site.urls)),

    url(r’^webapp/’, include(‘webapp.urls’)),

]

در کد بالا، من webapp و webapp.urls خود را اضافه نموده ام. حال فراموش نکنید که که Django.conf.urls.include را انتقال داده و یک include() در لیست urlpatterns قرار دهید. تابع include() به سایر URLconfs اجازه ارجاع میدهد.


کدنویسی کافی است! سرور را روشن نموده و ببینیم جه روی میدهد. برای روشن نمودن سرور، دستور زیر را تایپ نمائید:

python manage.py startapp webapp

پس از اجرا نمودن سرور، به http://localhost:8000/webapp/ در مرورگر خود بروید، باید عبارت  “HEY! Welcome to Dabirbartar!” را مشاهده نمائید که در فهرست view خود تعریف نموده اید.


برای آموزش بیشتر میتوانید در کلاس های آموزش Django آکادمی متلب و پایتون دبیر برتر ثبت نام نمائید.

دوره ۳۰ ساعته آموزش django در پایتون

۴۵۰,۰۰۰ تومان

دوره ۳۰ ساعته آموزش django در پایتون
مناسب برای تمامی افراد علاقه مند به طراحی سایت
(بدون نیاز به پیشنیاز)
آموزش Upload نمودن سایت برروی انواع سرور
آشنایی با url ها و مسیریابی
تست نویسی
نوشتن وب سرویس ها
و …

  • توضیحات
  • اهداف و پیش نیاز دوره
  • نظرات (۱)

توضیحات

دوره ۳۰ ساعته آموزش django در پایتون و آشنایی با آن

جنگو (Django) یک فریم ورک سطح بالا، رایگان و Open Source برای ساخت Web Application ها می باشد که در پایتون نوشته شده است. با استفاده از فریم‌ ورک جنگو می توانید وب اپلیکیشن های خود را آسان و سریع تر توسعه دهید. هدف از ساخت این فریم ورک اتصال اجزای مشابه سایت است که به دیتابیس نیاز دارند مانند: ثبت نام، ورود و خروج از سیستم، پنل مدیریت، فرم ها، آپلود فایل ها و غیره. با استفاده از فریم‌ورک جنگو نیازی به نوشتن کد های اضافی ندارید. فریم‌ورک جنگو بسیاری از ویژگی های پایتون را به ارث برده است. این فریم‌ورک قادر به ساخت وب سایت های پیچیده و حرفه ای در سریع ترین زمان و با امنیت بالا می باشد. فریم‌ورک جنگو از ساختار Model-View-Controller تبعیت می کند به همین دلیل کد های مربوط به بخش های کنترلی(Controller)، بخش داده ها(Model) و بخش مربوط به رابط کاربری(View) از هم جدا هستند دوره ۳۰ ساعته آموزش django در پایتون، پروژه محور بوده و برای کسانی که تاکنون طراحی وب نکرده اند نیز مناسب است. زیرا مسیری در نظر گرفته شده است تا شما بتوانید جایگاه خود را بشناسید و حتما نیازی نیست تا آگاهی از بخش طراحی سایت (Front ) داشته باشید. تمامی نکاتی که از Front باید بدانید نیز گفته شده است. در دوره ۳۰ ساعته آموزش django در پایتون کار با این فریم‌ورک را از ابتدا تا مرز Junior شدن می آموزید. همچنین شما به راحتی می توانید مسیر خود را در آینده پیدا کنید و در تیم های استارت آپی شروع به کسب درآمد نمایید.

هدف از این دوره این است که شما بتوانید جایگاه خود را بشناسید. در دوره آموزش جنگو کار با این فریم‌ورک را از ابتدا تا مرز Junior شدن می آموزید. همچنین شما به راحتی می توانید مسیر خود را در آینده پیدا کنید و در تیم های استارت آپی شروع به کسب درآمد نمایید.

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

۱ دیدگاه برای دوره ۳۰ ساعته آموزش django در پایتون

  1. امتیاز ۴ از ۵

    Hello there,

    My name is Aly and I would like to know if you would have any interest to have your website here at dabirbartar.com promoted as a resource on our blog alychidesign.com ?

    We are in the midst of updating our broken link resources to include current and up to date resources for our readers. Our resource links are manually approved allowing us to mark a link as a do-follow link as well
    .
    If you may be interested please in being included as a resource on our blog, please let me know.

    Thanks,
    Aly


دیدگاه خود را بنویسید

بیشتر بدانید ...

ساخت یک وب سایت دینامیک با Django

چگونه شروع به ساخت یک وب سایت با پایتون میکنید؟ خب، شما میتوانید با استفاده دانش قبلی خود، این کار را انجام دهید و برنامه ای بنویسید که بر روی یک وب سرور اجرا شده درخواست های صفحات را بپذیرد و به آنها به صورت HTML و دیگر منابع پاسخ دهد. با این حال، این کاری طاقت فرسا است، پس چرا به خودمان زحمت  بدیهم درست زمانی که ابزارهای زیادی برای انجام دادن این کار وجود دارند. این ابزار ها به framework ها معروفند و ما امروزه از آنها برای ساخت وبسایتمان استفاده میکنیم.

فریم ورک های پایتون

تعداد وب فریم ورک های پایتون زیاد نیست، اما برخی از بهترین های انها عبارتند از

Django

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

Grok

فریم ورک دیگری با مجموعه ای از ویژگی های که نزدیک به جنگو می باشد. اگر تصمیم بگیرید که جنگو را استفاده نکنید می توانید از این فریم ورک (GROK) استفاده کنید ، این یک جایگزین خوب است.

WebPy

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

TurboGears

این فریم ورک در گذشته بسیار استفاده می شده است ولی بیشتر به درد صفحات سبک میخورد. البته بر روی این فریم ورک در چند ماهه اخیر ویرایش هایی انجام شده است که به شدت بهبود پیدا کرده است.

نصب جنگو

اکثر فعالیت ما در بخش ترمینال خواهد بود. کدهای ما در این بخش بر روی سیستم های لینوکس و مک قابلیت اجرا دارد اما درصورتی که از ویندوز استفاده می نمائید فرآیند تا حدودی تغییر خواهد داشت. آشنایی با command line در صورتی که شما تنها پایتون مینویسد ضروری نیست، اگرچه، درصورتی که در نظر دارید از جنگو استفاده کنید یا به طور کلی یک وب سایت دینامیک را اجرا نمائید، آموزش آن ارزشمند است.

آموزش کار با ترمینال

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

کدهای مورد استفاده برای نصب جنگو را مشاهده می نمائید. هرچند این دستورات با نسخه ۳ پایتون همخوانی ندارند، بنابراین شما نیازمند نصب نسخه ۷.۲ و یا پایین تر برای اجرای این دستورات می باشد.

سپس ما می توانیم فایل های نصب را پاک نمائیم.

حال آنرا آزمایش میکنیم.

باید ۱.۳.۱ مشاهده شود. در صورت مشاهده جنگو نصب شده است.

ساخت وبلاگ

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

در ابتدا ما باید یک پروژه جدید در جنگو ایجاد کنیم :

 

هر کدام از این فایل ها چه کاری انجام میدهند:

__init__.py

به پایتون اعلام میکند که فولدر مورد نظر یک پکیج پایتونی است. به این معنی که به پایتون اجازه میدهد تا تمام script های موجود درون فولدر را به عنوان یک ماژول منتقل نماید.

manage.py

درواقع جزئی از وب سایت شما نیست؛ یک اسکریپت ابزاری است که شما میتوانید از command line آنرا اجرا نمائید و شامل تمام آرایه های توابعی است که برای مدیریت سایت خود نیاز دارید.

settings.py

فایلی است که URLها را به یک دیگر متصل نماید می نماید. برای مثال، میتواند yourwebsite.com/about  را به صفحه About Us  متصل نماید.

urls.py

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

این دستور برای لینک دهی استفاده می شود .

جنگو خود را به عنوان یک MTV framework معرفی میکند که در واقع به معنای Model Template View میباشد.

برنامه ها

با این حال، هیچ کدام از فایل های بالا به تنهایی نمیتوانند یک سایت فعال را ایجاد کنند. به همین دلیل ما نیاز به برنامه ها (Apps) داریم. برنامه ها محلی هستند که شما کدی را که باعث عمل نمودن وب سایت شما میشود در آن مینویسد، اما پیش از استفاده از آنها، باسد کمی درباره ضوابط طراحی جنگو بدانیم

نخست، جنگو یک فریم ورک MVC است، که به معنای Model View Controller می باشد. همچنین جنگو خود را به عنوان یک فریم ورک MTV می شناسد که به معنای Model Template View است که با فریم ورک MVC تفاوت ناچیز دارد. اما اساساً هردو شبیه به هم هستند. در هر حال، MVC یک الگوی وابسته به معماری است که روشی برای ساختاربندی پروژه شما ارائه میدهد. به این معنی که کدی را که برای پردازش داده استفاده شده است از کدی که برای مدیریت رابط کاربری استفاده شده است جدا می نماید.

جنگو بر اساس فلسفه DRY یا  ” خودت را دوباره تکرار نکن” عمل می کند.

ثانیاً، جنگو براساس فلسفه DRY یا ” خودت را دوباره تکرار نکن” عمل مینماید. که به این معنی است که، نباید یک کد که یک وظیفه مشخص را انجام میدهد را چندبار استفاده نمائید. برای مثال، اگر در بلاگی، این ویژگی را نوشته باشیم که مقاله ای را به صورت انتخابی از آرشیو انتخاب نماید، و این کدرا برای باقی صفحات نیز بخواهیم، تنها کافی است آنرا برای دیگر صفحات نیز استفاده کنیم و نیازی نیست که دوباره آنرا بنویسیم.

ممکن است سوال شود که برنامه ها چه مزیتی دارند؟ برنامه ها اجازه میدهند که وب سایت به شکل DRY نوشته شوند. هر پروژه ای، همانند آنچه ما اینجا داریم، میتواند شامل چندین برنامه شود. همچنین یک برنامه میتواند بخشی از چندیدن پروژه باشد. با توجه به مثالی که قبلا به ان اشاره شد، این به این معنی است که اگر ما در آینده سایتی ساختیم که نیاز به ویژگی گزینش انتخاب صفحات داشت، نیازی نیست که دوباره از ابتدا آنرا بنویسیم. ما به سادگی میتوانیم برنامه را از این پروژه منتقل کنیم. به همین دلیل، مهم است که هر برنامه، یک هدف مشخص را به سرانجام برساند. اگر تمام عملکر سایت خود را تنها بایک برنامه بنویسید و در اینده به بخشی از آن نیاز داشته باشید باید تمام آن را منتقل نمائید. برای مثال اگر در حال ساخت یک وب سایت فروش اینترنتی (eCommerce) بوده باشید، و نخواهید تمام ویژگی های بلاگ را منتقل نمائید. از سوی دیگر، اگر یک برنامه برای گزینش انتخابی و برنامه ای دیگر برای سیستم انتشارات بلاگ ساخته باشید، میتوانید هر بخشی از آن را که نیاز دارید انتخاب و منتقل نمائید. این همچنین به این معنی است که درون سایت کدها به خوبی دسته بندی شده اند. اگر شما بخواهید یک ویژگی را تغییر دهید، نیازی نیست که در تمام فایل به دنبال آن به جست و جو بپردازید؛ شما میتوانید به راحتی به برنامه مدنظر خود دسترسی داشته و آنرا بدون نگرانی از تداخل و تغییر در باقی موارد، تغییر دهید.

دوباره، ما یک فایل __init__.py  برای پکیج ساختن آن داریم و سه فایل دیگر: مدل ها، آزمایش ها و بازدیدها. در حال حاضر نیازی به بررسی آزمایشات نیست، اما دو مورد دیگر دارای اهمیت می باشند. مدل ها و بازدید ها بخش های M و V از MVC می باشند.در مدل، ما ساختار داده هایمان را تعریف می نمائیم.

در صورتی که پیش از این با PHP کار کرده باشید، ممکن است از PhpMyAdmin برای ساخت جداول MySQL خود استفاده کرده باشید، و سپس جستارهای SQL خود را به صورت دستی در متن PHP خود وارد کرده باشید. در جنگو این مسئله بسیار ساده تر است. ما تمام ساختار داده ای که برای مدل نیاز داریم تعریف کرده و یک دستور را اجرا میکنیم و تمام پایگاه داده های ضروری ساخته خواهند شد.

زمانی که شما نیاز به داشتن دسترسی به آن داده را دارید، شما به وسیله این مدل ها و با استفاده از فراخوانی روش بر روی آنها میتوانید به آنها دست یابد به جای آنکه جستار های خالی راجست و جو نمائید. این بسیار مفید است زیرا جنگو میتواند از چندین برنامه پایگاه داده استفاده نماید. برای مثال ما از MySQL استفاده خواهیم کرد، زیرا قویترین برنامه پایگاه داده بوده و قالب host ها پذیرای ان هستند.، اما اگر نیاز باشد که به پایگاه داده دیگری در آینده منتقل شویم،تمام کدها مجاز خواهند بود. در سایر زبان ها، اگر در پی تغییر به SQLite یا موردی دیگر بودید، نیاز بود تا دوباره تمام کدهای دسترسی به پایگاه داده را بازنویسی نمائید.

در فایل های مشاهده (view)، ما کدی را مینویسیم که در واقع صفحات وب را تولید می نماید و در واقع تمام بخش ها را به یکدیگر متصل می نماید. زمانی که یک کاربر یک URL تایپ میکند، توسط اسکریپت  urls  که ما پیشتر آنرا دیدیم، به اسکریپت  views فرستاده میشود، که سپس داده های مرتبط از مدل را میگیرد، آنرا پردازش کرده و آنرا با قالب پیش فرض ارسال می نماید که نهایتا به عنوان صفحه ای که کاربر میبند به نمایش در خواهد امد. ما نگاهی کوتاه به ان قالب های پیشفرض خواهیم داشت. آنها آسان ترین بخش هستند – غالبا HTML.

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

MySQL

این مدل ها تنها توضیح هستند. ما نیازمند هستیم تا یک پایگاه داده واقعی از آنها بسازیم. ابتدا، نیاز داریم تا MySQL بر روی سیستم ما اجرا شود. بر روی یک وب سرور واقعی، این موضوع مشکلی نخواهد بود زیرا آنها به طور پیش فرض آنرا نصب  کرده اند. خوشبختانه، با یک مدیریت پکیج، نصب ان اسان است. نخست. باید Homebrew  و Easy Install را نصب نمائید.

زمانی که شما ری استارت میکنید، MySQL اجرا نخواهد شد، پس هر زمانی در اینده که شما نیاز دارید تا server شروع به کار نماید باید،  mysqld  را اجرا نمائید. سپس شما میتوانید در یک زبانه جدید python2.6 manange.py runserver  را اجرا نمائید تا سرور توسعه را اجرا نماید. این دستور هنوز باعث اجرای سرور نخواهد شد، و تنها یک پیغام خطا را نشان خواهد داد. زیرا نیاز است تا تنظیمات پیکربندی شوند. به فایل    settings.py. توجه فرمایید. ابتدا لازم است که تنظیمات پایگاه داده تغییر یابد که از خط ۱۲ شروع میگردد.

در صورتی که sever را بار دیگر اجرا نمائید، باید به دستی عمل کند، به اعلام نماید که شما با موفقیت MySQL را نصب نمده اید. در صورتی که شما ۱۲۷.۰.۰.۱:۸۰۰ رت در مرورگر اینترنت خود جست و جو نمائید، باید صفحه پیشفرض جنگو را مشاهده کنید. حال به تغییر سایت جنگویی خود به یک بلاگ می پردازیم. ابتدا، نیاز است با استفاده از مدل ها جداولی را در پایگاه داده به وسیله اجرا کردن دستور زیر ایجاد نمائیم.

هر مرتبه که شما مدل های خود را تغییر دهید، باید این دستور را اجرا نمائید تا پایگاه داده را به روز نمائید. توجه داشته باشید که این موضوع باعث تغییر بخش های موجود نخواهد شد؛ تنها ممکن است مدل های بخش های جدید را اضافه نماید. بنابراین درصورتی که در پی پاک نمودن بخش ها هستنید، باید به صورت دستی و شبیه به PhpMyAdmin این عمل را انجام دهید. با توجه به اینکه بار اولی است که ما این دستور را اجرا میکنماییم، جنگو تمام جداول پیش ساخته را نصب خواهد کرد. تنها تایپ کنید “yes” و سپس جزئیات خود را وارد نمائید.

حال بیایید به نصب فایل urls.py   بپردازیم. خط اول در بخش مثال ها را از حالت comment خارج کرده و آنرا به   url(r’^$’, ‘FirstBlog.blog.views.home’, name=’home’) . تغییر دهید. حال، فایل های view را برای پاسخ به این درخواست ها ایجاد میکنیم.

قالب ها

این فایل index.html   هنوز وجود ندارد، پس باید ان را ساخت. پوشه ای ساخته، نام templates در برنامه  blog  را به آن داده و فایلی را به نام index.html در آن ذخیره میکنیم، که به سادگی میتواند شامل “Hello world” باشد. سپس نیاز است تا فایل تنظیمات را تغییر دهیم تا جنگو بداند که این قالب در کجا قرار دارد. خط ۱۰۵ محلی است که بخش مربوط به محل قرار گیری قالب ها شروع میشود؛ پس به صورت زیر ان را تغییر دهید:

اگر سرور را دوباره اجرا و صفحه را در مرورگر خود refresh نمائید، باید پیغام “Hello World” را مشاهده نمائید. حال ما میتوانیم بلاگ خود را منتشز نمائیم. ما چند کد متنی HTML را به صفحه خانه اضافه خواهیم کرد.

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

حال میتوانیم به این متغیرها از طریق فایل views.py   به وسیله ساخت یک dictionary از مقادیر، مقدار دهی نمائیم.

پس از ذخیره سازی و refresh، مشاهده خواهید کرد که محتوا را از طریق فایل view در یک غالب قرار داده اید. قدم نهایی این است که داده را از پایگاه داده گرفته و آن را جایگذاری نمائیم. خوشبختانه ما میتوانیم این کار را بدون نیاز به جستار های SQL،  با استفاده از مدل های جنگو انجام دهیم. نیاز است که برنامه  blog خود را به پروژه  FirstBlog  به وسیله تغییر یک تنظیم دیگر اضافه نمائیم. به خط ۱۱۲ INSTALLED_APPS   رفته و خط زیر را به لیست اضافه نمائید.

سپس، قالب را به روز رسانی نمائید تا به این داده ها دسترسی پیدا کنید.

حال، به تمام داده های موجود در جدولمان در فایل views.py  دسترسی داریم، سپس تنها ۱۰ ورودی ابتدایی را انتخاب میکنیم. این داده را در قالب قرار میدهیم،  حلقه ای برای ورودی ها ایجاد نموده، داده ها را با HTML سایت خود نشان خواهیم داد. این عمل هنوز عملی نخواهد شد، زیرا در پایگاه داده چیزی وجود ندارد. سرور را متوقف کرده و اجرا کنید:

جدولی جدید برای ارسال های ما در دیتا بیس ایجاد میکند. سپس، زبانه جدید باز کرده و تایپ کنید:

رمز عبور خود را تایپ کرده، دکمه enter را زده،  و اجرا نمائید:

به زبانه قبلی بازگشته و سرور را دوباره اجرا نمائید. صفحه را refresh نموده و باید یک ارسال وبلاگی را شماهده نمائید که به تازگی اضافه نموده اید. در صورتی که دستور MySQL را چند بار بیشتر اجرا نمائید، ارسال های بیشتری را بر روی فحه خواهید دید زمانی که آنرا refresh می نمائید.

سیستم مدیریت جنگو

آخرین نکته ای که باید به آن توجه شود، سیستم مدیریت جنگو است. این قابلیتی بسیار قدرتمند از سری قابلیت های جنگو می باشد که این امکان را فراهم می نماید تا بدون نوشتن هیچ کدی به مدیریت سایت پرداخت، در صورتی که اگر یک سایت از صفر ساخته شود برای مدیریت آن چنین عملی الزامی است. برای فعال سازی آن باید تعدادی از تنظیمات را تغییر دهینم. ابتدا خطوط ۴، ۵، ۱۳ و ۱۶ درون برنامه urls.py را از حالت Comment خارج کرده تا به صفحه مدیریت دسترسی پیدا کنیم. سپس به بخش INSTALLED_APPS از برنامه settings.py  رفته و ‘django.contrib.admin’,  و  ‘django.contrib.admindocs’, را از حالت comment خارج کنید. به منظور نظارت مدیر بر جدول  posts ، در پوشه blog  فایلی جدید به نام admin.py  اضافه نموده و خطوط زیر را اضافه نمائید.

بار دیگر python2.6 manage.py syncdb  را جرا کنید تا جداول برای بخش مدیر هم افزوده شوند، و سرور را ری استارت نمائید.

در صورتی که ۱۲۷.۰.۰.۱:۸۰۰۰/admin را در مرور گر خود مشاهده نمودید، باید صفحه ورد را مشاهده کنید. از جزئیاتی که پیشتر در زمان اجرای syncdb  انتخاب نموده بودید استفاده نمائید. باید بخشی را به عنوان بلاگ با زیر عنوانی برای  جدول posts  مشاهده نمائید. میتوانید به سادگی برای خلق، تغییر یا حذف ارسا های بلاگ استفاده نمائید.

تبریک شما یک بلاگ ساخته اید.

در انتها به نصب جنگو بر روی یک وب سرور می پردازیم.

نصب بر روی یک وب سرور

 دو نوع web hosting وجود دارد، و انتخاب شما بر استفاده از جنگو اثر گذار خواهد بود. در صورتی که یک host اشتراک گذاری شده دارید، host شما بسیار مناسب است.

بسیاری از host های ارزان قیمت از پایتون پشتیبانی  نمی کنند. در حالی که PHP کاملا تضمین شده است، حمایت از سایر زبان ها غالبا وجود ندارد. شما باید control panel را بررسی نمائید تا دریابید پیاتون (و جنگو) در دسترس هستند یا خیر. مسلما فرایند برای هر host متفاوت است. تقریبا تمام host ها بر روی Apache اجرا میشوند، و ما میتوانیم با استفاده از ماژول های mod_wsgi  یا mod_python  برای میزبانی جنگو اسفاده نمائیم.

اکثریت host ها متون را با استفاده از CGI به چندین زبان اجرا میکنند. جنگو میتواند بر روی FastCGi و به طور تئوری بر روی CGI اجرا شود، اما رسما این موضوع اعلام نشده است. بنابراین باید بررسی نمود که آیا این ها نصب شده اند یا خیر. معمولا در زیر بخش heading، برای مثال، “CGI and Scripting Language Support” یافت می شوند.

در صورتی که دارای VPS hosting می باشید، یا یک سرور اختصاصی دارید، کار بسیار راحت تر است. معمولا چنین سرورهایی از پیش دارای پایتون می باشند و بنابراین تنها نیاز به کپی کردن جنگو همانطور که در ایتدا توضیح داده شده می باشد. اما در صورتی که پایتون نصب نبود، با یک مدیریت پکیج می توانید آن را نصب نمائید.

به محض نصب جنگو بر روی سرورتان، سایتی که پیشتر ایجاد نمودید را به وسیله هر file transfer client مدنظر خود، بارگزاری نمائید. میتوانید این فایل ها را در هر محلی قرار دهید، اما آنها را ر پوشه  public  قرار ندهید، که در این صورت هر فردی میتواند کدهای اصلی سایت شما را مشاهده نماید.

سپس، یک پایگاه داده MySQL ساخته، نام آن را ‘firstblog’ گذاشته و syncdb  را دوباره اجرا نمائید. شما دوباره باید حساب کاربری خود را برای میز مدیریتی ایجاد نمائید، اما این تنها دفعه خواهد بود. با اجرای این فاسل با خطا مواجه خواهید شد، زیر تنظیمات سرور با تنظیمات کامپیوتر شخصی شما متفاوت است. ممکن است نیاز باشد تا رمز عبور خود را که درون settings.py قرار دارد تغییر دهید، اما با توجه به پیکر بندی سرور، ممکن است با مشکلات دیگری نیز برخورد نمائید. میتوانید از گوگل کمک بگیرید. این بار برای اجرای سرور ، دستور تا حدودی متفاوت است. شما باید یک آدرس IP مشخص و یک port معین را برای دسترسی به سایت بر روی نت، مشخص نمائید.

در صورتی که سایت خود را در یک مرورگر وب و بر روی پورت ۸۰۰۰ مشاهده کنید، سایت خود را خواهید دید.

بیشتر بدانید ...

تشخیص چهره به وسیله Open CV و Python

تشخیص چهره با استفاده از OpenCV: راهنمای گام به گام برای ساخت یک سیستم تشخیص چهره

هرگاه عبارت تشخیص چهره شنیده میشود، ناگهان به یاد دوربین های نظارتی می افتیم و هیچ گاه نمیتوان جمله معروف “شما تحت نطارت هستید. دولت یک سیستم پنهانی دارد، دستگاهی که هر ساعت از شبانه روز جاسوسی شما را میکند. من این را میدانم زیرا من آن را ساخته ام” که از فصل اول سریال تلویزیونی مظنون (person of interest) اقتباس شده است را فراموش نمود.

پیش از هرچیز:

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

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

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

نصب

ملزومات:

  • Python 3.3+ or Python 2.7
  • macOS or Linux (Windows not officially supported, but might work)
  • OpenCV
گزینه های نصب:

نصب بر روی Mac یا Linux
در ابتدا مطمئن شوید که dlib به همراه الحاقیات پایتون از پیش نصب شده است.

سپس این ماژول را از Pypi با استفاده از pip3 ( یا python 2 ) را نصب نمائید:

در صورتی که در نصب با مشکلی مواجه هستید، میتوانید pre-configured VM. را امتحان نمائید.

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

تصاویری که من استفاده نموده ام:

و تمام. در صورتی که دقیقا همانند آنچه که اینجا به نمایش درآمد کدها را دنبال نمائید، دقیقا به انچه من دست یافته ام دست خواهید یافت.

بیشتر بدانید ...

آموزش پایتون به زبان ساده قسمت چهاردهم

آموزش کار با زبان برنامه‌نویسی پایتون (بخش چهاردهم)

آموزش پایتون به زبان ساده

به آخرین قسمت از مجموعه مقاله‌های این مار خوش خط‌وخال خوش آمدید! این مجموعه، آموزشی گام‌به‌گام برای یادگیری زبان پایتون نبود، بلکه سعی کردیم از طریق مقاله‌های مختلف شما را با قابلیت‌های متنوع و امکانات فراوان زبان برنامه‌نویسی پایتون آشنا کنیم. اگر این مجموعه تنها توانسته باشد شما را به یادگیری و استفاده از این زبان تشویق کند، می‌توانیم با خوشحالی ادعا کنیم که به هدف مورد نظر رسیده‌ایم. در این بخش آخر، به معرفی مختصر کتابخانه Tkinter؛ ابزار رسمی تولید GUI در پایتون خواهیم پرداخت و در انتها منابعی را برای مطالعه بیشتر به شما معرفی خواهیم کرد.

آشنایی

کتابخانه Tkinter در اصل از زبان برنامه‌نویسی Tk گرفته شده است و مخفف عبارت Tk Interface است. ماجول Tkinter این امکان را برای ما فراهم می‌کند تا بدون نیاز به کتابخانه‌ها و ابزارهای جانبی و تنها با استفاده از قابلیت‌هایی که پایتون به‌صورت پیش‌فرض و در هنگام نصب استاندارد با خود به همراه دارد، به تولید رابط‌های بصری کاربر بپردازیم. 
این کار از طریق ابزارک‌هایی (widget) که Tkinter عرضه می‌کند، انجام خواهد شد. پنجره اصلی یا Toplevel container، دکمه‌ها (Button)، قاب‌ها (Frame)، ورودی متن (Text Entry)، دکمه‌های رادیویی (Radio Button) و بوم نقاشی (Canvas) نمونه‌هایی از این ابزارک‌ها هستند.

در حالت معمول، ما یک پنجره اصلی با نام Toplevel خواهیم داشت که به عنوان نگه‌دارنده‌ای (container) برای سایر ابزارک‌ها کار خواهد کرد. هر ابزارک دیگری به جز پنجره Toplevel یک ابزارک والد خواهد داشت و نمی‌تواند به تنهایی به وجود آید؛ اما لازم نیست والد آن حتماً Toplevel باشد. برای چیدن ابزارک‌های فرزند روی والد باید از سیستمی استفاده کنیم که به اصطلاح مدیریت هندسی (Geometry Management) نامیده می‌شود. برنامه‌نویسان به طور معمول این کار را به یکی از سه روش Packer، Grid یا Place management انجام می‌دهند. روش Packer بسیار زمخت و ابتدایی و شیوه Place management بسیار ریز و پر جزئیات است. در این قسمت، ما به سراغ روش Grid خواهیم رفت. برای درک بهتر یک صفحه شطرنجی را در نظر بگیرید که از تعدادی سطر و ستون تشکیل شده است و خانه‌های حاصل از این تقسیم‌بندی بر‌اساس شماره سطر و ستون آدرس‌دهی می‌شوند. در این تقسیم‌بندی، شماره‌گذاری سطرها و ستون‌ها از خانه بالا سمت چپ شروع شده و به راست و پایین ادامه می‌یابد. شماره سطرها و ستون‌ها همواره از صفر آغاز خواهد شد. برای کار با این شیوه، ابزارک والد تقسیم‌بندی شده و ابزارک‌های فرزند در این خانه‌های شطرنجی چیده خواهند شد. اگرچه این روش ممکن است در نگاه نخست بسیار محدود به نظر برسد، اما لازم است بدانید که ابزارک‌های فرزند می‌توانند شامل چندین خانه، چه سطری چه ستونی یا هر دو، باشند. بهتر است توضیحات بعدی را با یک مثال ادامه دهیم. پیش از شروع لازم است بدانید که برای کار با Tkinter در بعضی از توزیع‌های لینوکس لازم است بستهpython-tk را نصب کنید.

from Tkinter import *
mainWindow = Tk()
btnTest = Button(mainWindow,text=”Hello world!”).grid()
mainWindow.mainloop()
فهرست ۱- ایجاد یک پنجره ساده از طریق کتابخانه‌  Tkinter

شروع

نخستین برنامه ما همانند فهرست ۱ تنها شامل ۴ خط کد خواهد بود. این کدها را وارد کرده، ذخیره و اجرا کنید. نتیجه باید چیزی شبیه شکل ۱ باشد. در خط ۱ ما ابتدا کل توابع و متغیرهای موجود در ماجول Tkinter را import کرده‌ایم. در خط ۲ نمونه‌ای از شیء Tk که همان پنجره اصلی یا Toplevel است را به‌وجود آورده و در متغیر mainWindow ذخیره کرده‌ایم. خط ۳ یک نمونه از شیء دکمه را به‌وجود آورده و در متغیر btnTest ذخیره می‌کند. برای این کار، نخستین آرگومانی که به تابع ()Button داده‌ایم، نام شیء والد دکمه است. پس از آن مقدار آرگومان text یا متن روی دکمه را تنظیم کرده ودر نهایت آن را روی Grid یا شبکه شطرنجی قرار داده‌ایم. همان‌گونه که در این خط می‌بینید آرگومان‌های تابع با نام‌شان مقداردهی شده‌اند. در فراخوانی تمام توابع در پایتون، اگر ترتیب آرگومان‌های مورد نیاز را نمی‌دانید، می‌توانید آن‌ها را با درج نامشان مقداردهی کنید. در نهایت در خط ۴ تابع اجرا‌کننده رابط بصری یعنی ()mainloop را فراخوانده‌ایم. در این مثال، کلیک دکمه‌ای که ایجاد کرده‌ایم هیچ کاری انجام نمی‌دهد چرا که ما دستوری را که باید با کلیک این دکمه اجرا شود به برنامه معرفی نکرده‌ایم. در مثال بعدی کمی بهتر عمل خواهیم کرد.

from Tkinter import *
class App:
    def __init__(self,parent):
        myFrame = Frame(parent)
        self.btnQuit = Button (myFrame,\
            text=”Quit”,fg=”red”,command=myFrame.quit)
        self.btnHello = Button (myFrame,\
            text=”Hello”,command= self.SayHello)
        self.lblText = Label (myFrame,text=”Second Tk Sample”)
        myFrame.grid(column=0,row=0)
        self.lblText.grid(column=0,row=0,columnspan=2)
        self.btnHello.grid(column=0,row=1)
        self.btnQuit.grid(column=1,row=1)
        
    def SayHello(self):
        print “Hello World!”
mainWindow=Tk()
mainWindow.geometry(‘۱۵۰×۷۵+۵۵۰+۱۵۰’)
app = App(mainWindow)
mainWindow.mainloop()
فهرست ۲ –  ایجاد و چیدن دکمه‌ها و یک برچسب متنی روی پنجره اصلی برنامه 

پیشرفت

در این مثال، می‌خواهیم جزئیات بیشتری را برای رابط بصری برنامه فراهم‌کنیم. کدهای فهرست ۲ را در ویرایشگر دلخواه‌تان وارد، ذخیره و اجرا کنید. نتیجه اجرا باید چیزی شبیه شکل ۲ باشد. در این برنامه، کلیک دکمه Quit باعث خروج از برنامه شده و کلیک دکمه Hello پیغامی را در خط فرمان چاپ خواهد کرد. در این مثال، ابتدا کلاسی را برای ساخت و چیدن ابزارک‌های مختلف تعریف کرده‌ایم. هنگام ایجاد یک نمونه شیء از روی این کلاس، تنها آرگومانی که باید به آن ارسال شود ابزارک والد است. این کار که با فراخوانی تابع ()__init__ صورت می‌گیرد، یک قاب یا Frame ایجاد می‌کند که این قاب والد کلیه ابزارک‌های بعدی است. والد این فریم همان‌طور که در خط‌۴ می‌بینید، همان پنجره اصلی یا Toplevel است. پس از آن یک برچسب (Label) و دو دکمه ایجاد کرده‌ایم. به خط ۵  که وظیفه ساخت دکمه Quit را برعهده دارد توجه کنید، به احتمال حدس زده‌اید که آرگومان fg رنگ پیش‌زمینه یا متن دکمه را تعریف می‌کند. همین‌طور آرگومان command تابعی را که باید هنگام کلیک‌شدن این دکمه اجرا شود، مشخص می‌کند. برای این دکمه، ما از تابع  ()quit که به‌صورت پیش‌فرض در شیء Frame تعریف شده است، استفاده کرده‌ایم. اما برای دکمه Hello ما تابع SayHello را معرفی کرده‌ایم که تعریف و عملیات این تابع در خطوط ۱۵ تا ۱۶ آورده شده است. 

دقت کنید که برای سادگی کار، این تابع فعلاً خروجی خود را به خط فرمان یا ترمینال ارسال می‌کند. اما می‌توان آن را برای تغییر برچسب دکمه‌ها یا مثلاً افزودن متنی به پنجره برنامه تغییر داد. پس از آن باید محل این ابزارک‌ها را روی والدشان (myFrame) معرفی کنیم. این کار با فراخوانی تابع ()grid انجام شده است که در آن آرگومان‌های column و row به ترتیب ستون و سطر محل قرارگیری را مشخص می‌کنند. اگر به خط ۱۱ و جایگذاری شیء برچسب توجه کنید، آرگومانی با نام columnspan مشاهده می‌کنید که این آرگومان تعیین می‌کند شیء برچسب باید به اندازه دو ستون گسترده شود. به همین شکل برای گسترده شدن در جهت عمودی شما می‌توانید از rowspan نیز استفاده کنید. دقت داشته باشید که تابع ()grid، محل هر ابزارک را بر‌اساس والد آن تنظیم می‌کند. بنابراین شیء myFrame در موقعیت صفر و صفر روی Toplevel قرار می‌گیرد و مثلاً دکمه quit در موقعیت ۱و۱ از myFrame قرا خواهد گرفت.

در آخر و در خطوط ۱۷ تا ۲۰ ما شیء Toplevel و یک نمونه از کلاس App را ایجاد کرده‌ایم و تابع نمایش‌دهنده پنجره اصلی را فراخوانده‌ایم. تنها نکته جدید خط ۱۸ است. در این خط ما به تعریف مختصات و ابعاد پنجره اصلی پرداخته‌ایم. در این حالت، بخش ۱۵۰×۷۵ آرگومان، سایز پنجره را تعریف کرده و قسمت +۵۵۰+۱۵۰ فاصله آن را از لبه چپ و لبه بالا تنظیم می‌کند. این اعداد و ارقام را باید بر‌اساس برنامه موردنظرتان با آزمایش و خطا به دست بیاورید.

نمایش

ابزارک‌های ماجول Tkinter هرچند نسبت به زبان‌های برنامه‌نویسی گرافیکی نظیر VB یا #C  یا حتی wxWidgets ساده و بدوی به نظر می‌رسند، اما با توجه به امکانات و قابلیت‌هایی که دارند، تمام نیاز شما را در پروژه‌های کوچک برآورده خواهند کرد. شاید مهم‌ترین مزیت کتابخانه Tkinter و رابط‌های ساخته شده براساس آن، این باشد که به هیچ کتابخانه و کد اضافی احتیاج ندارند و تنها به کمک نصب استاندارد پایتون قابل استفاده خواهند بود. برای آشنایی بیشتر با سایر نمونه‌های این ابزارک‌ها و مشاهده قابلیت‌ها و جلوه‌های مختلف آن‌ها می‌توانید فایل demo.py را از آدرس دانلود و اجرا کنید تا دیگر ابزارک‌های  Tkinter و جلوه‌های آن‌ها را مشاهده کنید. شکل شماره ۳ نتیجه حاصل از اجرای این برنامه را نشان می‌دهد.

ادامه راه

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

راهنماهای استاندارد پایتون

پایتون به هنگام نصب و به صورت پیش‌فرض مجموعه کاملی از راهنماها، توضیحات و حتی آموزش‌های گام به گام را نیز با خود به همراه می‌آورد. در ویندوز کافی است به منوی Start بخش All programs و پوشه مربوط به پایتون رفته و گزینه Python Manuals را کلیک کنید. در شکل ۴ نمونه‌ای از صفحه نخست این مجموعه را مشاهده می‌کنید. در لینوکس یا دیگر سکوها نیز در صورت نبود Python Manuals می‌توانید آن‌ها را به صورت آنلاین و از آدرس مشاهده کرده و مورد استفاده قرار دهید. این مستندات به حدی مهم است که برنامه‌نویسان پایتون ادعا می‌کنند باید آن‌ها را در زیر بالش خود هم داشته باشید. 

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

آموزش گام به گام «یک بایت پایتون» به آدرس نیز یکی از مشهورترین خودآموزهای پایتون است که نسخه‌های جداگانه‌ای برای هر دو سری ۲.x و ۳.x را فراهم کرده است. اگرچه با توجه به مطالبی که تاکنون یاد گرفته‌اید، مطالب این راهنما به احتمال برای شما بسیار ساده خواهد بود.

شیرجه در پایتون

یکی دیگر از مهم‌ترین و شاید قدیمی‌ترین منابع آموزشی پایتون، کتاب‌های رایگان «شیرجه در پایتون» (Dive Into Python) است. این مجموعه که توسط مارک پیلگریم تهیه شده؛ و به نسبت منبع قبلی مباحث بسیار پیشرفته‌تری را عرضه می‌کند، نیز به صورت جداگانه سری ۲.x و سری ۳.x پایتون را شامل می‌شود. برای استفاده از نسخه مربوط به سری ۲.x به آدرس http://www.diveintopython.net مراجعه کنید. در این آدرس می‌توانید کل مجموعه را به صورت یک کتاب با فرمت‌های مختلف دریافت کنید. برای استفاده از نسخه مربوط به سری ۳.x نیز به آدرس http://diveintopython3.net مراجعه کنید. البته این نسخه تنها به صورت آنلاین قابل استفاده است و امکان دانلود آن وجود ندارد.

سخن آخر

به یاد داشته باشید که هیچ خودآموز و راهنمایی همانند تجربه به شما کمک نخواهد کرد. یادگرفتن صرف دستورات و قواعد نحوی یک زبان برنامه‌نویسی از شما یک برنامه‌نویس نخواهد ساخت. برای این کار هیچ میان‌بری وجود ندارد. تا برنامه‌های واقعی ننویسید و با مشکلات دنیای واقعی دست‌وپنجه نرم نکنید، هیچ‌گاه به موفقیت نخواهید رسید. به نوشته ارزشمند پیتر نورویگ در آدرس http://norvig.com/21-days.html مراجعه کنید تا ببینید در سه روز، یک هفته، یک ماه و یک سال چه اندازه یاد خواهید گرفت و درک کنید برای حرفه‌ای شدن چه مسیر طولانی را در پیش خواهید داشت. 

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

بیشتر بدانید ...

آموزش پایتون به زبان ساده قسمت سیزدهم

آموزش کار با زبان برنامه‌نویسی پایتون (بخش سیزدهم)

آموزش پایتون به زبان ساده

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

متادیتا

نخستین نکته‌ای که باید بدانید این است که فایل‌های mp3 می‌توانند اطلاعاتی را درباره خود فایل ذخیره کنند. اطلاعاتی نظیر عنوان آهنگ، عنوان آلبوم و نام خواننده از جمله این اطلاعات هستند. این اطلاعات در برچسب‌های ID3 ذخیره می‌شود که به اصطلاح فرا داده یا «متادیتا» نامیده می‌شوند. در نخستین روزهای ظهور فایل‌های mp3 تنها مقدار بسیار کمی از این اطلاعات در فایل‌های mp3 ذخیره می‌شد. در آن زمان این اطلاعات در قسمت پایانی فایل‌های mp3 ذخیره می‌شد و بلوکی متشکل از ۱۲۸ بایت بود. به‌واسطه حجم اندک این بلوک، تنها ۳۰ کاراکتر به هر یک از اطلاعاتی نظیر نام آهنگ و آلبوم و خواننده اختصاص داده شده بود. برای بسیاری از فایل‌ها همین مقدار کافی بود، اما اگر با آهنگی با نام طولانی، نام آلبومی طولانی و… روبه‌رو می‌شدیم، مشکل خودنمایی می‌کرد. این برچسب‌های ID3 تحت‌عنوان استاندارد ID3v1 طبقه‌بندی شدند و برای تکمیل آن نسخه جدیدی از این استاندارد با نام ID3v2 معرفی شد. این استاندارد جدید امکان ذخیره اطلاعاتی با طول‌های متغیر را آن هم در ابتدای فایل فراهم می‌آورد. با استفاده از این استاندارد، اطلاعات ID3v1 هنوز برای حفظ سازگاری با پخش‌کننده‌های قدیمی در انتهای فایل حفظ می‌شدند. به کمک این استاندارد جدید، متادیتا می‌توانست حجمی تا حداکثر ۲۵۶ مگابایت داشته باشد! در این استاندارد هر گروه از اطلاعات در یک چهارچوب یا فریم (Frame) نگه‌داری می‌شود و هر فریم یک معرف یا Identifier دارد. در نسخه فعلی (۲/۴) این استاندارد، طول این معرف چهار کاراکتر است.

import os , sys
from os.path import join , getsize , exists
from mutagen.mp3 import MP3
import apsw
def MakeDatabase():
pass
def S2HMS(t):
pass
def WalkThePath(musicpath):
pass
def error(message):
pass
def main():
pass
def usage():
pass
if __name__ == ‘__main__’:
main()

فهرست ۱-  چهارچوب اصلی برنامه

موتاژن 

پیش‌تر برای کار با این متادیتاها، باید فایل را به‌صورت باینری باز‌می‌کردیم و در آن‌ اطلاعات موردنظر را جست‌وجو می‌کردیم. این کار اگرچه ممکن و ساده بود، اما به زمان و کدنویسی بسیاری نیاز داشت. اما اکنون دیگر می‌توانیم از کتابخانه‌های متعددی که برای این کار تهیه شده‌اند، استفاده کنیم. ما از کتابخانه‌ای به نام موتاژن (Mutagen) در این پروژه استفاده خواهیم کرد. برای ادامه کار در اوبونتو در مدیر بسته Synaptic موتاژن را جست‌وجو کرده و آن را نصب کنید. اگر از سیستم‌های ویندوزی برای کدنویسی استفاده می‌کنید، می‌توانید این کتابخانه را از آدرس دریافت و نصب‌کنید. البته، موتاژن به غیر از فایل‌های mp3 قابلیت کار با فرمت‌های M4A ،Ogg Vorbis ، ASF و بسیاری فرمت‌های دیگر را هم دارد. در این پروژه علاوه بر موتاژن مانند دو قسمت قبل به کتابخانه apsw نیز برای کار با پایگاه‌های داده نیاز خواهیم داشت.

def usage():
message = (
‘====================================\n’
‘mCat finds all mp3 files in a folder\n’
‘and subfolders. Reads the ID3 tags and \n’
‘writes the information to a SQLite database.\n’
‘usage:\n’
‘\t %s <foldername>\n’
‘\t WHERE <foldername> is the path to the mp3 files.\n’
‘====================================\n’
) %sys.argv[0]
print type(sys.argv)
error(message)
sys.exit(1)
فهرست ۲-  کدهای مورد نیاز برای تکمیل تابع Usage

شروع

فایل جدیدی با نام mCat.py‌ ایجاد کنید و کدهای فهرست ۱ را که چهارچوب اصلی برنامه ما را می‌سازند، در آن وارد کنید. اگرچه این فایل در این وضعیت هیچ کاری انجام نمی‌دهد، اما با اجرای آن و در صورت عدم دریافت پیغام خطا می‌توانید مطمئن شوید که تمام کتابخانه‌های مورد نیاز را به درستی نصب‌کرده‌اید. 
در این فهرست ما اسکلت مربوط به توابع مورد نیاز را پیاده کرده‌ایم. تنها نکته عجیب شاید آخرین قسمت این کد یعنی خطوط ۱۷ و۱۸ باشد. هنگامی که یک کد به اجرا در می‌آید، چه به صورت مستقیم و چه با import شدن در سایر کدها، پایتون نامی را به آن نسبت می‌دهد و با آن همانند یک شیء رفتار می‌کند. زمانی که کد به تنهایی اجرا شود، نامی که به آن نسبت داده می‌شود __main__ است. با دستور if موجود در خط ۱۷ ما کنترل می‌کنیم که آیا این فایل به‌صورت مستقیم اجرا شده است یا خیر؟ اگر فایل به صورت مستقیم اجرا شده بود، تابع اصلی برنامه یعنی ()main اجرا خواهد شد. اما اگر فایل در یک کد دیگر import شده باشد، هیچ کدی به‌صورت مستقیم اجرا نخواهد شد و برنامه منتظر می‌ماند تا توابع موجود در آن توسط برنامه import کننده فراخوانده شود.

def main():
global connection
global cursor
if len(sys.argv) != 2:
usage()
else:
StartFolder = sys.argv[1]
if not exists(StartFolder):
print “Folder %s does not exist. Exiting.” %StartFolder
sys.exit(1)
else:
print “\nWorking on %s” %StartFolder
connection = apsw.Connection(“mCat.db3”)
cursor = connection.cursor()
MakeDataBase()
WalkThePath(StartFolder)
cursor.close()
connection.close()
print “\nFinished.”
فهرست ۳-  کدهای مورد نیاز برای تکمیل تابع main

def MakeDataBase():

    sql = ‘CREATE TABLE IF NOT EXISTS mp3 (pkID INTEGER PRIMARY KEY,’

    sql = sql + ‘ title TEXT, artist TEXT, album TEXT, bitrate TEXT, ‘

    sql = sql + ‘genre TEXT, playtime TEXT, track INTEGER, year TEXT,’

    sql = sql + ‘ filesize TEXT, path TEXT, filename TEXT);’

    cursor.execute(sql)

فهرست ۴-  کدهای مورد نیاز برای تکمیل تابع (Make Data Base(1

تعریف توابع

حال به تکمیل این توابع می‌پردازیم. در ابتدا به سراغ تابع ()usage می‌رویم. این تابع نحوه کار برنامه ما را برای کاربر توضیح خواهد داد. همچنین با اعلام بروز خطا اجرای برنامه را متوقف خواهد کرد. کدهای این تابع را در فهرست ۲ مشاهده می‌کنید.
در این کدها که باید جایگزین خطوط ۱۵ و‌۱۶ فایل اصلی (فهرست ۱) شوند، ابتدا رشته‌ای با نام message‌ در خطوط ۲ تا ۱۱ تعریف شده است. دو نکته کوچک در تعریف این متغیر وجود دارد. نخست این‌که اگر تعدادی رشته را بدون هیچ عملگری پشت سر‌هم ردیف کنیم، پایتون آن‌ها را به ترتیب به هم افزوده و یک رشته طولانی‌تر به‌وجود خواهد آورد؛ دوم این‌که در خط ۸ ما با s% جایی را برای درج یک رشته خالی گذاشته‌ایم. این جای خالی در خط ۱۲ و از طریق [sys.argv[0 % با نام فایل حاوی برنامه پر شده است. با import کردن ماجول sys ما به متغیری به نام argv دسترسی خواهیم داشت. این متغیر که از جنس لیست است، حاوی کل آرگومان‌هایی است که در هنگام اجرای برنامه از طریق خط فرمان وارد‌شده‌اند. برای نمونه، اگر برای اجرای فایل mCat در خط فرمان از دستور زیر استفاده شود:

python mCat.py /usr/Music Ali 1234

 مقدار [‘mCat.py’ , ‘/usr/Music’ , ‘Ali’ , ‘۱۲۳۴’]  در متغیر argv ذخیره خواهد داشت. در این متغیر آرگومان اول یا [argv[0همواره نام فایل اجرا شده خواهد بود. 
در خط ۱۳ ما تابع error را برای اطلاع‌دادن به کاربر فراخوانده‌ایم و پس از آن در خط ۱۴ با استفاده از (sys.exit(1 از برنامه خارج شده‌ایم. تابع exit از ماجول sys برای پایان بخشیدن به اجرای برنامه‌ها به کار می‌رود و در صورتی که مقدار ارسال شده به آن ۰ باشد، به سیستم اعلام می‌کند که اجرا با موفقیت به پایان رسیده است. در غیر این صورت مشخص خواهد شد که اجرای برنامه به‌واسطه خطا متوقف شده است.
حال نوبت به تعریف تابع error می‌رسد. برای تکمیل این تابع عبارت زیر را جایگزین کلمه pass در خط ۱۲ فهرست ۱ کنید.

print >> sys.stderr , message

در این دستور print، ما از قابلیت تغییر مسیر خروجی‌ استفاده‌ کرده‌ایم و پیغام را به خروجی استاندارد تعریف شده برای پیغام‌های خطا هدایت‌ کرده‌ایم. توضیح ضروری این‌که در سیستم‌عامل به‌صورت استاندارد، خروجی‌هایی برای چاپ اطلاعات معمول، اطلاعات مربوط به خطاها و ورودی اطلاعات کاربر در نظر گرفته می‌شود که به ترتیب stdout ، stderr و stdin نامیده می‌شوند. زمانی که شما از دستور print به‌صورت عادی استفاده می‌کنید، اطلاعات شما به‌صورت خودکار به stdout منتقل‌می‌شود که در پایتون این خروجی روی ترمینال‌تعریف شده است. خروجی stderr نیز به‌صورت پیش‌فرض روی همان ترمینال است، اما می‌توان آن را به محل‌های دیگری (مثلاً یک فایل متنی برای ذخیره کل پیغام‌های خطا) نیز هدایت کرد. از این خروجی‌ها و ورودی‌های متفاوت می‌توان برای تهیه logهای دقیق و کامل از اجرای نرم‌افزار استفاده کرد. 

اکنون باید به سراغ تابع اصلی یا main برویم. این تابع که کدهای آن را در فهرست ۳ مشاهده می‌کنید، ابتدا اتصال یا connection و مکان‌نما یا cursor مورد نیاز را برای کار با پایگاه داده تعریف کرده و پس از آن با کنترل آرگومان‌هایی که کاربر هنگام اجرای برنامه وارد کرده و در صورتی که آرگومان‌ها درست باشند،‌ اعمال اصلی برنامه را به انجام می‌رساند.
در اینجا همانند دو شماره پیشین، متغیرهای عمومی connection و cursor‌ را برای کار با پایگاه داده تعریف کرده‌ایم. پس از آن پارامترهایی را که کاربر در خط فرمان وارد کرده است، کنترل کرده‌ایم. ما ورودی کاربر را برای یافتن ۲ پارامتر کنترل می‌کنیم که نخستین مورد، نام برنامه اجرا‌شده و دومی آدرس پوشه موردنظر است. به خاطر داشته باشید که اگر آدرس شما حاوی کاراکتر فضای خالی (space) باشد، به عنوان دو پارامتر جدا در نظر گرفته شده و باعث بروز خطا می‌شود. در این حالت باید آدرس را در علامت‌های کوتیشن قرار دهید. اگر کاربر آدرس پوشه‌ای را وارد نکرده یا بیش از یک آدرس را وارد کرده باشد، با پیغام خطا روبه‌رو خواهد شد. اگر ورودی کاربر درست باشد، ابتدا در خط ۹ کنترل می‌کنیم که آیا چنین پوشه‌ای موجود است یا خیر. تابع exists() که از ماجول os آورده شده است، با گرفتن یک آدرس در سیستم فایلی کامپیوتر وجود یا عدم‌وجود آن را کنترل می‌کند.

پس از آن و در خط ۱۶ تابع ساخت پایگاه‌داده (MakeDataBase) فراخوانده شده است. این تابع که در فهرست ۴ آورده شده، درصورت عدم وجود جدول mp3  در فایلmCat.db3 آن را بامشخصات مورد نظر ایجاد می‌کند. پس از آن با فراخوانی تابع ()WalkThePath کل پوشه‌ داده شده بررسی و فایل‌های mp3 آن شناسایی شده و اطلاعات به پایگاه داده منتقل می‌شود. پس از آن هر دو شیء connection و cursor بسته شده‌اند. 

در این تابع ما ابتدا سه شمارنده برای ردگیری تعداد خطاها، پوشه‌ها و فایل‌ها ایجاد کرده‌ایم. پس از آن برای نگه‌داری سوابق خطاهای احتمالی، فایلی با نام errors.log ایجاد شده است. پس از آن به کمک تابعی که ماجول os در اختیار ما قرار می‌دهد، به بررسی پوشه‌ مورد نظر پرداخته‌ایم. سیستم کار تابع ()walk به این ترتیب است که کار را از پوشه‌ داده شده توسط کاربر شروع کرده و به تمام پوشه‌ها و زیرپوشه‌های موجود در آن به ترتیب وارد شده و این روند را برای هر یک از زیرپوشه‌ها نیز تکرار می‌کند. در هرکدام از زیرپوشه‌ها، ما به دنبال فایل‌هایی گشته‌ایم که پسوندشان mp3 باشد. پس از آن به سراغ هریک از فایل‌های یافت شده رفته‌ایم و ابتدا متغیرهای محلی مربوط به آن را از محتوای قبلی پاک کرده‌ایم. پس از آن از تابع ()join ماجول os.path استفاده کرده‌ایم و آدرس کامل فایل را برای موتاژن آماده کرده وآن را به عنوان آرگومان تابع ()MP3 موتاژن مورد استفاده قرار می‌دهیم تا وهله‌ای از شیء audio را برای ما ایجاد کند. پس از آن کل برچسب‌های ID3 آن را خوانده و برچسب‌های موردنظرمان را جدا کرده و در متغیرهای موقتی ذخیره می‌کنیم. آن‌گاه از این متغیرها برای ساختن دستور SQL و وارد کردن اطلاعات در پایگاه داده استفاده می‌کنیم. تنها نکته قابل توجه شاید فرم دستور SQL باشد. در اینجا نیز ما با فرمتی شبیه %s در دستور print، محل مقادیر را با ؟ مشخص کرده‌ایم و بعدتر هنگام اجرای دستور SQL این متغیرها را در محل موردنظر جایگذاری می‌کنیم. 

در انتها در قسمت کنترل خطاها با نوع دیگری از قالب‌بندی رشته‌ها و جایگذاری مقادیر مواجه می‌شوید که شاید کمی عجیب باشد. این syntax برنامه‌نویسی یکی از اجزای اجباری سری ۳.x پایتون است. در این شیوه مقادیر {۰} و {۱} . . . با مقادیر متناظر در پرانتز format جایگزین می‌شوند.
کدهای مربوط به تابع MakeDataBase را در فهرست ۴ مشاهده می‌کنید. در اینجا با توجه به نکته‌هایی که در دو شماره قبل درباره ایجاد پایگاه‌های‌داده‌گفتیم، نباید در درک روند انجام کار این تابع مشکلی وجود داشته باشد. در این مورد هم به سادگی یک دستور SQL برای ساخت یک جدول با فیلدهایی نظیر نام آلبوم، نام هنرمند، ژانر موسیقی و… ساخته و اجرا شده است.
 نکته مهمی که باید به آن توجه کنید این است که شما باید پیش از اجرای برنامه، فایل پایگاه داده را به‌شخصه ساخته و در پوشه‌ برنامه قرار دهید. کدهای این فهرست را جایگزین خطوط ۵ و ۶ فهرست ۱ کنید. البته می‌توانید به دلخواه خود کدهایی را به این تابع و تابع ()main   بیافزایید تا آدرس محل ذخیره پایگاه داده یا نام آن نیز از کاربر پرسیده شود و فایل موردنظر نیز درست همزمان با اجرای برنامه ایجاد شود.

def S2HMS(t):
    if t > 3600:
        h = int(t/3600)
        r = t-(h*3600)
        m = int(r / 60)
        s = int(r-(m*60))
        return ‘%d:%02d:%02d’.format(h,m,s)
    else:
        m = int(t / 60)
        s = int(t-(m*60))
        return ‘%d:%02d’.format(m,s)

فهرست ۵-  کدهای مورد نیاز برای تکمیل تابع S2HMS

در نهایت، به بررسی تابع S2HMS می‌پردازیم. این تابع که کدهای آن را در فهرست ۵ مشاهده می‌کنید، مدت هر آهنگ را که توسط موتاژن به صورت یک عدد اعشاری برگردانده می‌شود به فرمت ساعت:دقیقه:‌ثانیه تبدیل می‌کند. به نحوه مرتب کردن خروجی تابع در دستورات return در خطوط ۷ و‌۱۱ توجه کنید. با عبارت %۰۲dما از پایتون می‌خواهیم که عدد جایگزین را حتی اگر تک رقمی بود، دو رقمی منظور کند و به جای رقم نخست آن ۰ قرار دهد.

استفاده

با تکمیل آخرین تابع دیگر زمان استفاده از برنامه فرا رسیده است. حال می‌توانید با دستور زیر برنامه را اجرا کنید: 

python mCat.py <folder>

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

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

بیشتر بدانید ...

آموزش پایتون به زبان ساده قسمت دوازدهم

آموزش کار با زبان برنامه‌نویسی پایتون (بخش دوازدهم)

آموزش پایتون به زبان ساده

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

import apsw
import string
class CookBook:
def __init__(self):
pass
def All(self):
pass
def Search(self):
pass
def Show(self,which):
pass
def Add(self):
pass
def Delete(self,which):
pass
def Menu():
ckb= CookBook()
loop=True
while loop:
print “********************”
print “* Recipe Database *”
print “********************”
print “ ۱-Show all”
print “ ۲-Search for a recipe”
print “ ۳-Show a recipe”
print “ ۴-Add a recipe”
print “ ۵-Delete a recipe”
print “ ۰-Exit”
print “********************”
response= raw_input(“ Enter your selection: “)
if response == ‘۱’:
pass
elif response == ‘۲’:
pass
elif response == ‘۳’:
pass
elif response == ‘۴’:
pass
elif response == ‘۵’:
pass
elif response == ‘۰’:
print “\n\tGoodbye”
loop=False
else:
print “\nUnrecognized command. Try again.\n\n”
Menu()
فهرست ۱- چهارچوب کلی برنامه Cook Book

def __init__(self):
global connection
global cursor
self.totalCount=0
connection = apsw.Connection(“cookbook1.db3”)
cursor=connection.cursor()

فهرست ۲- کدهای تکمیل تابع راه‌اندازی کلاس Cook Book

def All(self):
print “\n\nNumber \tName \t\tServes \t\tSource”
print “-”*۵۵
sql = “SELECT * FROM Recipes”
cntr=0
for x in cursor.execute(sql):
cntr += 1
print “%s \t%s \t%s \t\t%s” %(x[0],x[1],x[2],x[3])
print “-”*۵۵
self.totalCount = cntr
print “Total number of items: %s” %cntr

فهرست ۳- کدهای تابع نمایش تمام موارد موجود در پایگاه داده

همچنین برای نگه‌داری روال‌های مربوط به پایگاه داده یک کلاس تعریف خواهیم کرد. چون این کد بسیار طولانی خواهد بود ما در ابتدا چهارچوب کلی آن را نوشته و سپس قسمت‌های مختلف را به تدریج به آن می‌افزاییم. برای شروع کار این چهارچوب را که در فهرست ۱ آورده شده، وارد کرده و آن را با نام CookBook.py ذخیره کنید.
همان‌طور که در این کد مشاهده می‌کنید، کلیت یک کلاس و تابعی برای ترسیم یک منو روی صفحه نمایش تعریف شده است. ما به تدریج این چهارچوب را برای رسیدن به برنامه نهایی تکمیل خواهیم کرد. اگر در وضعیت فعلی برنامه را اجرا کنید، شکلی همانند شکل ۱ را مشاهده خواهید کرد. در این حالت، تنها کلید ۰ برای خروج از برنامه کار خواهد کرد. اکنون به نوشتن روتین راه‌اندازی کلاس و سایر روتین‌های مربوط به اعمال نمایش‌کل اطلاعات، جست‌وجو، نمایش یک مورد، افزودن و حذف موارد پایگاه داده خواهیم پرداخت. از میان این روتین‌ها، روتین‌های نمایش کل اطلاعات، جست‌وجو و افزودن آیتم به هیچ آرگومان ورودی نیاز ندارند (البته همان‌طور که از بحث‌های کلاس‌ها و اشیاء به یاد دارید، به جزء آرگومان اجباری self). اما روتین‌های نمایش و حذف به پارامتری نیاز دارند که در این کدها آن را which نامیده‌ایم و این پارامتر تعیین می‌کند کدام آیتم باید نمایش داده‌شده یا حذف شود.

راه‌اندازی

در ابتدا باید روتین راه‌اندازی کلاس یا __init__ را کامل کنیم. کدهای مورد نیاز برای این روتین در فهرست ۲ آورده شده است. این کد را جایگزین خطوط ۵ و۶ فهرست ۱ کنید.
در اینجا ابتدا دو متغیر جهانی تعریف‌کرده‌ایم. این متغیرها به رغم این‌که در تعریف یک تابع آورده شده‌اند، به‌واسطه کلمه global، در تمام برنامه قابل استفاده‌خواهند بود. این کار را به این دلیل انجام می‌دهیم که پایگاه داده و مکان‌نمای مربوط به آن در تمام روتین‌های برنامه قابل دسترس باشند. برای کار با پایگاه داده‌ای که در قسمت قبل ایجاد کردید، باید این برنامه و فایل پایگاه‌داده را در یک پوشه و در کنار هم قرار دهید و در خط ۵، نام فایل پایگاه داده خود را جایگزین cookbook1.db3 کنید.

نمایش همه موارد

برای نمایش همه موارد از کد فهرست‌۳ استفاده خواهیم کرد. این کد را در کلاس CookBook فهرست‌۱ جایگزین خطوط ۷ و ۸ کنید. همین‌طور باید از خط ۳۴ فهرست ۳ کلمه pass را حذف و عبارت زیر را جایگزین آن کنید:

ckb.All()
temp = raw_input(“Press any key\ to continue…”)

در این تابع ما از cursor ساخته شده در روتین __init__ استفاده کرده‌ایم و تمام محتویات جدول Recipes را فراخوانی کرده‌ایم، سپس در یک حلقه تمام مقادیر را با قالب‌بندی‌های استفاده شده در دستور print (که قبلاً با آن آشنا شده‌اید) به‌صورت منظم چاپ کرده‌ایم. به یاد دارید که apsw مقادیر برگشتی جدول را به صورت توپل به ما باز‌می‌گرداند، به همین دلیل، ما از [x[0 و [x[1 و… استفاده کرده‌ایم. در انتهای این روتین و در خط ‌۱۱ تعداد کل آیتم‌های موجود در جدول Recipes را نیز اعلام کرده‌ایم.

جست‌وجو

برای بخش جست‌وجو، به دلیل کمبود فضا، تنها بخش جست‌وجوی نام دستورالعمل را پیاده‌سازی کرده‌ایم و جست‌وجو بر اساس محتویات و تعداد نفراتی را که با یک دستورالعمل سیر می‌شوند، به عهده شما گذاشته‌ایم. کدهای این روتین در فهرست ۴ آورده شده است. این کدها را جایگزین خطوط ۹ و ۱۰ فهرست کنید.
در این کد و در خط ۵ عبارت موردنظر از کاربر پرسیده شده و در خط ۶ با تعریف یک دستور sql عملیات جست‌وجو را روی پایگاه داده انجام‌داده‌ایم. شاید عبارت %%%s%% در این خط کد عجیب به نظربرسد. در زبان sql برای تعریف مشابهت از کلمه کلیدی like و فرم %term% استفاده می‌شود. در این حالت کلماتی که مشابه term باشند، برگردانده می‌شوند. اما چون در زبان پایتون از علامت % برای فرمت‌کردن رشته‌ها استفاده می‌شود، یک رشته نمی‌تواند به طور مستقیم شامل علامت % باشد. برای درج این علامت در یک رشته باید دوبار آن را پشت سر هم (%%) به‌کار ببریم. به این ترتیب، در خط ۷ جفت علامت‌های سمت راست و چپ به تک علامت‌های % و قسمت وسط (%s) نیز توسط عبارت term جایگزین‌می‌شود. در انتهای این روتین و در خط ۹ از تابع ()Show که آن را در قسمت بعد تعریف می‌کنیم، برای نمایش آیتم‌های مورد نظر استفاده کرده‌ایم. برای فعال شدن این بخش باید کلمه pass درخط ۳۶ فهرست ۱ با عبارت () ckb.Search جایگزین شود.

def Search(self):
print
print “=”*۵۵
print “Searching in recipes by name”
term = raw_input(“Enter name of the recipe: “)
sql = “SELECT pkID , name FROM Recipes WHERE name like\ ‘%%%s%%’” %term
for x in cursor.execute(sql):
self.Show(x[0])

فهرست ۴- کدهای تابع جست‌وجو در پایگاه داده براساس نام دستورالعمل

def Show(self,which):
sql = “SELECT * FROM Recipes WHERE pkID = %s” %str(which)
print “\n”
print “=”*۵۵
for x in cursor.execute(sql):
print “Title: %s \t Serves: %s \t Source: %s”\ %(x[1],x[2],x[3])

sql = “SELECT * FROM Ingredients WHERE pkID = %s” %str(which)
print “\nIngredients:”
for x in cursor.execute(sql):
print x[1]

sql = “SELECT * FROM Instructions WHERE pkID = %s” %str(which)
print “\nInstructions:”
for x in cursor.execute(sql):
print x[1]
print “=”*۵۵
print “\n”

فهرست ۵- کدهای تابع مورد نیاز برای نمایش یک آیتم از پایگاه داده

نمایش یک مورد

برای عملیاتی کردن این بخش، ابتدا با فراخوانی تابع ()All تمام موارد را به کاربر نشان خواهیم داد و از او خواهیم خواست که آیتم مورد نظر را انتخاب کند.برای این کار کلمه pass در خط ۳۸ فهرست ۱ را با کد‌های زیر جایگزین کنید:

ckb.All()
temp = raw_input(“What to show:”)
ckb.Show(temp)

پس از آن با فرستادن آیتم انتخاب شده به عنوان آرگومان which به روتین ()Show آن آیتم را به نمایش خواهیم گذاشت. کدهای مربوط به این روتین در فهرست ۵ آورده شده است. این کدها را جایگزین خطوط ۱۱ و ۱۲ فهرست ۱ کنید. در این کد، در خط ۲ دستور sql مورد نیاز را برای انتخاب آیتمی که شماره ردیف (pkID) آن با آرگومان which به تابع اعلام شده است، تعریف کرده‌ایم. پس از آن با تعریف دو دستور sql دیگر مقادیر متناظر را از جدول‌های Ingredients و Instructions استخراج کرده و با دستور print چاپ کرده‌ایم.

def Add(self):
ings = ““
lastid = 0
recipename=raw_input(‘Enter Recipe Title -> ‘)
recipesource=raw_input(“Enter Recipe Source -> “)
recipeserves=raw_input(“Enter number of servings -> “)
while True:
ing = raw_input(‘Enter Ingredient (“۰” to exit) -> ‘)
if ing != ‘۰’:
ings = ings + ing + “, “
else:
break
instructions = raw_input(‘Enter Instructions -> ‘)
print ‘=’*۵۵
print “Here›s what we have so far”
print “Title: %s” % recipename
print “Source: %s” % recipesource
print “Serves: %s” % recipeserves
print “Ingredients: %s” % ings
print “Instructions: %s” % instructions
print ‘=’*۵۵
resp = raw_input(“OK to save? (Y/n) -> “)
if resp.upper() != ‘N’:
#connection=apsw.Connection(“cookbook1.db3”)
#cursor=connection.cursor()
# Write the Recipe Record
sql = ‘INSERT INTO Recipes (name,serves,source) VALUES\ (“%s”,”%s”,”%s”)’ %(recipename,recipeserves,recipesource)
cursor.execute(sql)
# Get the new Recipe pkID
sql = “SELECT last_insert_rowid()”
cursor.execute(sql)
for x in cursor.execute(sql):
lastid = x[0]
print “last id = %s” % lastid
# Write the Instruction Record
sql = ‘INSERT INTO Ingredients (recipeID,ingredients)\ VALUES (%s,”%s”)’ % (lastid,x)
cursor.execute(sql)
# Write the Ingredients records
sql = ‘INSERT INTO Instructions (recipeID,instructions)\ VALUES( %s,»%s»)’ %(lastid,instructions)
cursor.execute(sql)
# Prompt the user that we are done
print ‘Done\n’
else:
print ‘Save aborted\n’

فهرست ۶- کدهای تابع افزودن آیتم جدید به پایگاه داده

افزودن

روتین مربوط به افزودن موارد، طولانی‌ترین روتین این مجموعه است که آن را در فهرست ۶ مشاهده می‌کنید، آن را جایگزین خطوط ۱۳ و۱۴ فهرست ۱ کنید. شروع این روتین و خط‌های ۲ تا ۶ متغیرهای ابتدایی مورد نیاز نظیر نام دستورالعمل، تعداد نفرات و… را تعریف و مقداردهی می‌کند. تنها موردی که شاید به توضیح نیاز داشته باشد، دریافت مواد لازم است که در یک حلقه while انجام شده است و هر ورودی کاربر به‌صورت رشته‌ای با جداکننده کاما (،) به انتهای متغیر ings افزوده شده است. این روند تا زمانی که کاربر۰ را وارد کند، ادامه می‌یابد. پس از آن در خطوط ۱۴ تا ۲۱ کل اطلاعات یک بار دیگر برای کاربر نمایش داده می‌شود تا از صحت آن اطمینان حاصل شود.
پس از گرفتن تأیید کاربر، در خطوط ۲۷ تا ۲۹ با تعریف دستورالعمل مورد نیاز، موارد ابتدایی را در جدول Recipes ذخیره می‌کنیم. در خطوط ۳۱ و ۳۲ همان‌گونه که در قسمت قبل دیده‌اید، شماره آخرین رکورد افزوده شده به جدول را استخراج کرده‌ایم. از این رکورد برای مرتبط کردن داده‌های جدول‌های Ingredients و Instructions به مقادیر وارد شده در جدول Recipes استفاده کرده‌ایم. ذخیره داده در دو جدول Ingredients و Instructions به ترتیب در خطوط ۳۶ تا ۳۹ و۴۰ تا ۴۳ انجام شده است. در نهایت، اتمام عملیات ذخیره‌سازی با یک پیغام به کاربر اطلاع داده شده است.فراموش نکنیدکه برای فعال شدن این بخش باید کلمه pass در خط ۴۰ فهرست ۱ را با ()ckb.Add جایگزین کنید.

حذف

در نهایت به روتین حذف موارد می‌رسیم. همان‌گونه که حدس می‌زنید، در این روتین نیز ابتدا با فراخوانی()ckb.All همه موارد به کاربر نشان داده شده و در نهایت از او خواسته می‌شود تا آیتم مورد نظر را برای حذف‌کردن انتخاب کند. این روتین در فهرست ۶ آورده شده است.آن را جایگزین خطوط ۱۵ و ۱۶ فهرست ۱ کنید و برای کار کردن این کد باید کلمه pass در خط۴۲ فهرست‌۱ با عبارت زیر جایگزین شود:

ckb.All()
temp = raw_input(“What to delete:”)
ckb.Delete(temp)

در این کد هم با استفاده از آرگومان which که شماره انحصاری آیتم را نشان می‌دهد، دستورات sql مورد نیاز را برای حذف آیتم‌ها از جدول‌های Recipes، Ingredients و Instructions تعریف و اجرا کرده‌ایم.دقت کنید که برای ساده‌تر‌شدن کار، ما از بسیاری از روتین‌های کنترل ورودی کاربر، مرتب‌سازی خروجی و بسیاری قابلیت‌های دیگر که می‌توانست چنین برنامه‌ای را کامل‌تر‌کند، صرف‌نظر‌کرده‌ایم. اگرچه وجود این قابلیت‌ها در غالب نرم‌افزارهای تجاری و حرفه‌ای الزامی است، اما پیاده‌سازی آن‌ها بسیار ساده و بدون مشکل خواهد بود. برای نمونه، در هنگام نمایش یا حذف یک مورد بهتر بود که ما شماره آیتم وارد‌شده توسط کاربر را بررسی کنیم تا در محدوده صحیحی قرار داشته باشد یا مثلاً کاربر به جای شماره از حروف استفاده نکرده باشد. که چنین مواردی با روال‌های معمول if قابل پیاده‌سازی است.

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

بیشتر بدانید ...

سرمایه‌گذاری مطمئن روی یک زبان درست

متداول‌ترین سوالاتی که در ارتباط با زبان برنامه‌نویسی پایتون مطرح می‌شود

شما هم جزء آن گروه از برنامه‌نویسانی هستید که تصمیم گرفته‌اند در سال نو یک زبان برنامه‌نوسی جدیدی را یاد بگیرند؟ اگر مصمم شده‌اید تا پایتون را بیاموزید اما مطمئن نیستید که چگونه باید اینکار را آغاز کنید، پیشنهاد ما این است که ابتدا مطلب زیر را مطالعه کنید.

ما در این مقاله به شما می‌گوییم که پایتون چیست؟ چرا مفید است، چگونه می‌توانید برنامه‌نویسی با پایتون را آغاز کنید و برای شروع باید به سراغ چه منبعی بروید.

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

چرا باید پایتون را یاد گرفت؟

بهترین دلیل برای یادگیری پایتون در سادگی آن نهفته است. پایتون از جمله زبان‌های برنامه‌نویسی است که یادگیری آن فوق‌العاده ساده است. یکی از ایدولوژی‌هایی که در بطن ساخت پایتون قرار دارد تعهد آن به لذت‌بخش کردن برنامه‌نویسی خلاصه شده است. به‌طور خلاصه برنامه‌نویسی با پایتون سرگرم کننده است. آن‌گونه که سایت TIOBE اشاره کرده است، پایتون در سه ماهه اول سال ۲۰۱۸ جزء چهار زبان محبوب برنامه‌نویسی قرار گرفته است، به‌طوری که پیش از زبان‌های برنامه‌نویسی محبوب همچون جاوااسکریپت و روبی قرار دارد.

یکی از دلایلی که باعث می‌شود اکثر برنامه‌نویسان به سراغ یادگیری پایتون بروند به منابع بسیار عظیمی باز می‌گردد که به شکل رایگان روی اینترنت قرار دارند. همین موضوع بازار کار خوبی برای پایتون به وجود آورده است. پایتون تنها یک زبان برنامه‌نویسی سرگرم کننده نیست، بلکه بسیار کاربردی است که برای ساخت انواع مختلفی از اسکریپت‌ها و نرم‌افزارها مورد استفاده قرار می‌گیرد.

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

پایتون رایگان است؟

بله، پایتون به‌طور کامل رایگان و متن‌باز است. یکی از بهترین جنبه‌های پایتون در توسعه جامعه‌محور بودن آن مستتر است که عمدتا از طریق گیت‌هاب انجام می‌شود. در این سایت شما سورس‌کدهای پایتون و وصله‌های ارائه شده برای آن را مشاهده می‌کنید. در سایت IRC نیز کاربران در مورد باگ‌ها، ویژگی‌ها و دیگر عنوان‌های مرتبط با پایتون صحبت می‌کنند. اگر شما هم به این مباحث علاقه‌مند هستید به آدرس Python Developer’s Guide مراجعه کنید.

چه مدت طول می‌کشد تا پایتون را یاد بگیرم؟

همانند هر زبان برنامه‌نویسی


این موضوع به خود شما بستگی دارد. اگر تجربه کار با زبان‌های دیگر را دارید و در یادگیری این زبان نیز مستعد هستید، یادگیری سریع‌تر خواهد بود. اما در مقایسه با سایر زبان‌ها روند یادگیری آن خیلی سریع‌تر است. به‌طور متوسط اگر فرض کنیم تمرین روزانه دارید برای افراد تازه‌کار در حدود یک الی دو ماه زمان می‌برد که آن‌را یاد گرفته و نزدیک به ۸ تا ۱۲ ماه زمان می‌برد تا در آن مهارت کسب کنید. یک برنامه‌نویس مجرب ممکن است ظرف سه ماه به راحتی بتواند با پایتون کار کند. برای سرعت بخشیدن به روند یادگیری ما توصیه می‌کنیم ابتدا مفاهیم ضروری پایتون را که در سری مقالاتی در سایت شبکه قرار داده‌ایم مطالعه کنید. همچنین سعی کنید دوره‌های مقدماتی و رایگان یادگیری پایتون را نیز یاد بگیرید.

چه تفاوتی میان پایتون ۲.x و ۳.x وجود دارد؟


زمانی که پایتون ۲.۰ اولین بار در سال ۲۰۰۰ عرضه شد، یک زبان خیلی محبوب نبود. زمانی که توسعه‌دهندگان یادگیری آن را آغاز کرده و در ساخت پروژه‌ها از آن استفاده کردند، رخنه‌ها و نقص‌های آن آشکار شدند، اما سازندگان نمی‌توانستند بدون اعمال تغییرات بزرگ این رخنه‌های شناسایی شده را ترمیم کنند. زمانی که پایتون ۳.۰ در سال ۲۰۰۸ میلادی ارائه شده همراه با تغییرات بزرگی در اختیار توسعه‌دهندگان قرار گرفت که قابلیت‌های جدید و بهبود قابلیت‌های قبلی را به آن‌ها هدیه داد. اما این نسخه با پایتون ۲.x ناسازگار بود. این حرف به معنای آن است که توسعه‌دهندگان برای بهره‌مندی از قابلیت‌های پایتون ۳.x به رفکتور کردن کدها نیاز دارند. رویکردی که بسیاری از توسعه‌دهندگان تمایلی به انجام اینکار نداشتند و به همین دلیل به سراغ کتابخانه‌ها و چهارچوب‌های شخص ثالث رفتند. در نتیجه پایتون اساسا به دو شاخه ۲.x legacy و ۳.x present تقسیم شد. شاخه ۳.x تمرکزش بر توسعه فعال قرار دارد و شاخته ۲.x تنها روی برطرف کردن باگ‌ها و ارائه به‌روزرسانی‌های امنیتی متمرکز است. امروزه جامعه توسعه‌دهندگان به سمت پایتون ۳.x رفته‌اند.

چگونه پایتون را روی ویندوز نصب کنیم؟

برای نصب پایتون روی ویندوز باید از نصب کننده رسمی آن استفاده کنید.

پایتون x.3 را دانلود کرده و نصب‌کننده را اجرا کنید.

زمانی که پیغام تایید ظاهر شده اطمینان حاصل کنید که گزینه Add Python 3.x to PATH را پیش از نصب انتخاب کرده‌اید.

در پیغام ظاهر شده پیغام Yes for UAC permissions را کلیک کنید.

صبر کنید تا نصب به اتمام برسد.

در پایان  Disable path length limit را کلیک کرده و سپس  Yes for UAC permissions را کلیک کرده و سپس Close را کلیک کنید تا نصب به پایان برسد.

بیشتر بدانید ...

پایتون چیست و در چه زمینه‌هایی به کار گرفته می‌شود؟

همه چیز درباره زبان برنامه‌نویسی قدرتمند و همه‌کاره پایتون

پایتون چیست و در چه زمینه‌هایی به کار گرفته می‌شود؟


پایتون از جمله زبان‌های برنامه‌نویسی قدرتمندی است که در زمینه علم داده‌ها، یادگیری ماشینی، خودکارسازی سامانه‌ها، توسعه وب، واسط‌های برنامه‌نویسی و… به کار گرفته می‌شود. اما سؤالی که بسیاری از کاربران و به‌ویژه برنامه‌نویسان مبتدی مطرح می‌کنند این است که اساساً پایتون چیست و آیا ارزش آن‌ را دارد تا وقت خود را روی یادگیری این زبان سرمایه‌گذاری کنیم؟ در این مقاله به‌شکل ساده‌ای به این پرسش پاسخ خواهیم داد.

شاید بتوانیم این ‌گونه بیان کنیم که پایتون در مقایسه با زبان‌های بزرگ یک زبان نسبتاً جدید به شمار می‌رود. این زبان برنامه‌نویسی در سال ۱۹۹۱ به دنیای برنامه‌نویسی وارد شد. از همان ابتدا، پایتون به‌منظور پر کردن شکاف‌های موجود در دنیای برنامه‌نویسی و ارائه راهکاری به‌منظور نوشتن اسکریپت‌هایی که فرآیند انجام یکسری از کارهای روتین‌ خسته‌کننده را به ‌طور خودکار اجرا کنند یا ساخت یک نمونه اولیه از برنامه‌های کاربردی که در یک یا چند زبان دیگر پیاده‌سازی شوند، مورد استفاده قرار گرفت. با این حال در چند سال گذشته، پایتون به یکی از ابزارهای تراز اول در زمینه توسعه برنامه‌های کاربردی، مدیریت زیرساخت‌ها و تحلیل داده‌ها تبدیل شده است. امروزه پایتون در زمینه توسعه برنامه‌های کاربردی تحت وب و مدیریت سیستم‌ها و تجزیه و تحلیل بزرگ داده‌ها که رشد انفجاری به خود گرفته‌اند و همچنین هوش مصنوعی به یکی از بازیگران اصلی دنیای فناوری تبدیل شده است. پایتون این موفقیت چشم‌گیر و کاربرد گسترده را مدیون یکسری ویژگی‌های ارزشمندی است که هم در اختیار توسعه‌دهندگان حرفه‌ای و هم در اختیار توسعه‌دهندگان تازه‌کار قرار داده است. از جمله این ویژگی‌ها به موارد زیر می‌توان اشاره کرد.

یادگیری پایتون ساده است

یادگیری کم‌ دردسر پایتون


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

پایتون به‌شکل گسترده‌ای به کار گرفته شده و پشتیبانی می‌شود

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

پایتون برای انجام چه کارهایی مورد استفاده قرار می‌گیرد؟

پایتون یک زبان برنامه‌نویسی


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

از پایتون در ارتباط با برنامه‌نویسی‌های عادی و رایج نیز می‌توان استفاده کرد

طراحان و توسعه‌دهندگان نرم‌افزار این توانایی را دارند تا هر دو گروه برنامه‌های کنسولی و گرافیکی را با پایتون ایجاد و آن‌ها را به‌شکل خوداجرا مستقر کنند. پایتون به طور ذاتی این توانایی را ندارد تا یک فایل‌ باینری مستقل را از یک اسکریپت‌ ایجاد کند. اما پکیج‌های ثالثی شبیه به cx_Freeze یا PyInstaller این کاستی پایتون را جبران کرده‌اند.

از پایتون در ارتباط با برنامه‌نویسی‌های عادی و رایج نیز می‌توان استفاده کرد

طراحان و توسعه‌دهندگان نرم‌افزار این توانایی را دارند تا هر دو گروه برنامه‌های کنسولی و گرافیکی را با پایتون ایجاد و آن‌ها را به‌شکل خوداجرا مستقر کنند. پایتون به طور ذاتی این توانایی را ندارد تا یک فایل‌ باینری مستقل را از یک اسکریپت‌ ایجاد کند. اما پکیج‌های ثالثی شبیه به cx_Freeze یا PyInstaller این کاستی پایتون را جبران کرده‌اند.

پایتون در ارتباط با وب سرویس‌ها و توابع RESTful نیز به کار گرفته می‌شود

کتابخانه‌های محلی پایتون به‌همراه چهارچوب‌های وب بخش ثالث سریع‌ترین و راحت‌ترین راهکار را در اختیار طراحان وب قرار داده‌اند تا بدون دردسر خاصی بتوانند توابع REST چندخطی یا یک سایت داده‌محور مملو از اطلاعات را با استفاده از پایتون طراحی کنند. REST (سرنام Representational State Transfer) یک معماری وب سرویس است که از پروتکل HTTP برای انتقال اطلاعات میان کلاینت و سرور استفاده می‌کند. جدیدترین نگارش‌های عرضه شده از پایتون به‌شکل قدرتمندی از عملیات غیرهم‌زمان پشتیبانی می‌کند. پشتیبانی از عملیات غیرهم‌زمان به‌معنای آن است که سایت‌ها قادرند ده‌ها هزار درخواست در هر ثانیه را از طریق کتابخانه‌های درستی که مورد استفاده قرار می‌دهند مدیریت کنند.

پایتون در ارتباط با برنامه‌نویسی Metaprogramming به کار گرفته شود

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

پایتون یک زبان چسبنده است

کدهای پایتون


خاصیت چسبندگی دارند، به‌ طوری که در بعضی موارد از زبان پایتون به‌عنوان یک زبان چسبنده (Glue language) نام برده می‌شود. زبان پرل نیز چنین ویژگی را دارد. این ویژگی به شما اجازه می‌دهد کدهای متفاوت را به یکدیگر وصل کنید. (به طور معمول کتابخانه‌هایی با رابط‌های زبان سی) از این تکنیک در زمینه علم داده‌ها و یادگیری ماشینی استفاده می‌شود.

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

جوانب مثبت و منفی زبان پایتون

ترکیب نحوی پایتون


کاملاً خوانا و تمیز است. به ‌طور مثال، نوشتن یک برنامه استاندارد Hello world در نسخه ۳.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 در پس زمینه و به‌شکل خودکار انجام می‌شود. اما اگر مشکلی در این زمینه به وجود آید، برنامه‌نویس می‌تواند این فرآیند را به‌طور دستی مدیریت کند. یکی دیگر از ویژگی‌های جالب پایتون پویایی این زبان است. هر چیزی در این زبان همچون توابع و خود ماژول‌ها به‌عنوان یک شی شناخته و مدیریت می‌شوند. در حالی که این تکنیک تا حدودی سرعت را قربانی می‌کند، اما در مقابل اجازه می‌دهد کدهای سطح بالا را به‌سادگی بنویسید. این تکنیک نه‌تنها به طراحان اجازه می‌دهد اشیای پیچیده را به‌سادگی و از طریق تنها چند دستورالعمل مدیریت کنند، بلکه به آن‌ها اجازه می‌دهد بخش‌هایی از برنامه را در صورت لزوم به‌شکل انتزاعی تعریف کنند. شاید یکی از بهترین یا بدترین ویژگی‌های زبان پایتون در ارتباط با فضای سفید است. توررفتگی‌ها و رفتن به خطوط دوم در زبان پایتون تنها برای خوانایی برنامه نیست.
فضای سفید یکی از اصلی‌ترین بخش‌های ترکیب نحوی پایتون به شمار می‌رود. مفسران زبان پایتون برنامه‌هایی را که به‌شکل درستی از دندانه‌‌گذاری به‌منظور نشان دادن جریان کنترل برنامه استفاده نکرده باشند رد می‌کنند.

پایتون ۲ در مقابل پایتون ۳

در حال حاضر، دو نسخه از زبان پایتون در اختیار برنامه‌نویسان قرار دارد. هریک از این دو نسخه ویژگی‌های خاص خود را دارند. پایتون نسخه ۲.X نسخه قدیمی‌تر است و پشتیبانی رسمی و عرضه به‌روزرسانی‌ها برای این نسخه تا سال ۲۰۲۰ ادامه خواهد داشت. حتی این احتمال وجود دارد که پس از این تاریخ نیز به‌صورت غیررسمی از این نسخه پشتیبانی به عمل آید. نسخه ۳.X نسخه جدیدتر است که یکسری ویژگی‌های مفید و البته مهم دارد.

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

ویژگی‌هایی که در نسخه ۲.x وجود ندارند. مفسران کارآمدتر و کنترل‌های هم‌روندی بهتر از جمله این ویژگی‌ها هستند. اگر در گذشته برای نوشتن یک برنامه هم‌روند در پایتون با مشکل روبه‌رو بودید، نسخه ۳.x این مشکل شما را برطرف کرده است. با وجود این، پذیرش پایتون۳ به‌آرامی انجام گرفت، در نتیجه پشتیبانی از یکسری کتابخانه‌های بخش ثالث روند نسبتاً کندی داشته است. اغلب کتابخانه‌های پایتون تنها در نسخه ۲ پشتیبانی می‌شوند که همین موضوع سوئیچ کردن به نسخه ۳ را با دشواری همراه می‌سازد. اما در چند سال گذشته، تعداد کتابخانه‌هایی که تنها در نسخه ۲ پشتیبانی می‌شدند رو به افول نهاده است و اکثر این کتابخانه‌ها با هر دو نسخه سازگاری دارند. در مقطع فعلی به دلایل مختلفی می‌توان اشاره کرد که مهاجرت به پایتون ۳ را توجیه‌پذیر می‌سازند.

آیا زبان پایتون به‌لحاظ سرعت کند است؟

یکی از نکات رایجی که در ارتباط با پایتون وجود دارد مبحث کند بودن آن است. این موضوع تا حدودی صحت دارد. برنامه‌های نوشته شده با پایتون در مقایسه با برنامه‌هایی که به زبان‌های سی، سی پلاس پلاس و جاوا نوشته می‌شوند عمدتاً کندتر اجرا می‌شوند. اما سؤال این است که چرا این برنامه‌ها کند هستند؟
بسیاری بر این باورند که مشکل کند بودن به دلیل آن است که محیط‌های زمان اجرای پایتون مبتنی بر مفسر هستند و اگر از کامپایلر استفاده شده بود مشکل کندی برطرف می‌شد، اما این تمام ماجرا نیست.
پویایی ذاتی و انعطاف‌پذیری اشیا در پایتون باعث شده است تا فرآیند بهینه‌سازی سرعت به‌سختی امکان‌پذیر باشد. با وجود این، مبحث سرعت مشکل بزرگی نیست که پایتون را تحت‌الشعاع خود قرار دهد. به‌واسطه آنکه راهکارهایی برای حل این مشکل وجود دارد. پایتون راهکارهای مختلفی برای بهینه‌سازی سرعت در اختیار دارد.
اگر گفته می‌شود که یک برنامه نوشته شده با پایتون کند است، به‌معنای آن نیست که این برنامه تا آخرین روزهای حیاتش کند خواهد بود. بیشتر برنامه‌های پایتون کند هستند، به‌واسطه آنکه ممکن است از کتابخانه‌های استاندارد پایتون استفاده نکرده یا به‌درستی از ویژگی‌های موجود در پایتون بهره نبرده‌ باشند.
عملیات ریاضی و آماری می‌توانند از طریق کتابخانه‌هایی همچون NumPy و Pandas و محیط زمان اجرای PyPy سریع‌تر شوند و به‌شکل قابل توجهی سرعت برنامه‌های پایتون را افزایش دهند. درنهایت اگر به‌دنبال داده‌کاوی داده هستید، بهتر است از زبان پایتون
غافل نشوید.


بیشتر بدانید ...

آموزش پایتون به زبان ساده قسمت یازدهم

آموزش کار با زبان برنامه‌نویسی پایتون (بخش یازدهم)

آموزش پایتون به زبان ساده

برنامه‌نویسی در دنیای امروز که لبریز از داده‌های‌متفاوتی است که روز به روز بر تنوع و حجم آن‌ها افزوده می‌شود، بدون آشنایی با پایگاه‌های داده و استفاده از قابلیت‌های آن‌ها غیرممکن خواهد بود. در این قسمت و قسمت بعدی مجموعه مقاله‌های برنامه‌نویسی پایتون، به معرفی نحوه کار با پایگاه‌های داده از طریق کدهای پایتون خواهیم پرداخت. در بخش کنونی بیشتر به معرفی دستور زبان و نحوه کار پایگاه‌های داده SQL خواهیم پرداخت و در بخش بعدی نحوه استفاده از این زبان را در کدهای پایتون فرا خواهیم گرفت. در این دو قسمت ما از پایگاه داده SQLite و کتابخانه توابع python-apsw در محیط لینوکس (اوبونتو) استفاده خواهیم کرد.

یک داستان

روزی روزگاری بود که دنیا به‌وسیله کاغذ اداره‌می‌شد. کاغذ، کاغذ و باز هم کاغذ. انسان‌ها مجبور بودند، به فکر ایجاد مکان‌های مناسبی برای نگه‌داری کاغذها باشند. این مکان‌ها را بایگانی می‌نامیدند و بایگانی کسب‌وکارهای بزرگ برای ذخیره تمام کاغذها، معمولاً چندین اتاق را اشغال می‌کرد. در هر بایگانی قفسه‌ها و کمدهایی وجود داشت که آن‌ها نیز به نوبه خود پر از پوشه‌های مختلف بودند. هر یک از این پوشه‌ها کاغذهای مربوط به یک موضوع خاص را نگه‌داری می‌کردند. اما پس از مدتی، ظرفیت همه آن‌ها به اتمام می‌رسید یا در اثر مرور زمان و باز و بسته شدن زیاد فرسوده شده و ازهم می‌پاشیدند. استفاده درست از این سیستم بایگانی نیازمند مدارک دانشگاهی بود و گاه یافتن کل پرونده‌ها و کاغذهای مربوط به یک موضوع به چندین روز زمان نیاز داشت. کسب‌وکارها و سازمان‌ها از این وضعیت در عذاب بودند و آن دوران، دورانی تاریک در تاریخ بشریت محسوب می‌شد!
ناگهان روزی، فرشته‌ای دوست‌داشتنی با بال‌هایی طلایی از بلندای کوهی ظاهر شد. نام او «سی‌کوئل» بود. فرشته ادعا کرد، می‌تواند مشکل کلنجار رفتن با این قفسه‌ها و پوشه‌ها را حل‌کند، البته، به شرطی که مردم به او و کامپیوترها اعتماد کنند. او این جادوی جدید را «پایگاه داده» نامید و گفت که پایگاه داده می‌تواند جایگزین تمام آن سیستم‌های بایگانی شود. 
اما استفاده از این جادوی جدید، پیش‌نیازهایی داشت. مردم باید زبان جدیدی را می‌آموختند. البته، این زبان بسیار شبیه زبان عادی مردم بود و بیشتر به نوع متفاوتی از جمله‌بندی نیاز داشت و افراد باید پیش از به کار بردن این جمله‌های جادویی به دقت فکر می‌کردند. آن‌ها باید ابتدا طرحی از ارتباط میان داده‌ها و اطلاعات خود ترسیم می‌کردند. برخی از مردم حرف‌های او را پذیرفتند و زندگی برای آن‌ها بسیار لذت‌بخش و ساده شد و دیگرانی که او را به سخره گرفتند، در میان کوه‌های کاغذ مدفون شدند. پایان!

شروع

اگرچه این داستان چندان واقعی نبود، اما استفاده از پایگاه‌های داده و SQL (بخوانید سی‌کوئل) زندگی ما را ساده‌تر خواهد کرد. پایگاه‌های داده همانند قفسه‌های بایگانی داستان بالا هستند. در این پایگاه‌های داده، جدول‌ها نقش پوشه‌ها را بازی می‌کنند و هر رکورد یا سطر این جدول‌ها در واقع حکم برگه‌های کاغذ در بایگانی‌های سنتی را دارند. هر تکه از اطلاعات یک فیلد نامیده‌می‌شود. برای کار با این سیستم ما از SQL (سرنام Structured Query language) یا «زبان پرس‌وجوی ساخت‌یافته» استفاده‌می‌کنیم. اگرچه این زبان از ابتدا برای ساده‌کردن کار با پایگاه‌های داده طراحی‌شده است، اما عبارت‌های مورد استفاده در آن می‌توانند بسیار پیچیده و طولانی شوند.

برای شروع بیایید به دستور پخت غذاهای مختلف فکر کنیم. این دستورهای پخت به فرم‌های گوناگون و در محل‌های مختلف نظیر کتاب‌های‌آشپزی، مجله‌ها، بسته‌بندی مواد غذایی و جاهای متنوع دیگر به چشم می‌خورند. اگرچه ظاهر آن‌ها ممکن است با هم متفاوت باشد، اما قالب همه آن‌ها یکسان است. در ابتدا نام غذا آورده شده است، پس از آن فهرست مواد لازم را خواهیم داشت و در انتها روش تهیه غذا توضیح داده شده است. پایگاه داده نمونه ما برای نگه‌داری این دستورالعمل‌های پخت غذا طراحی خواهد شد. ما از قالب کلی نوشتن این دستورالعمل‌ها برای طراحی جدول‌های پایگاه داده‌ استفاده کرده و در این قسمت مقاله پایگاه‌داده را ایجاد می‌کنیم. در قسمت بعدی کدهای مربوط به خواندن و نوشتن اطلاعات روی پایگاه داده را خواهیم نوشت. هرچند که می‌توانیم جزئیات این پایگاه داده را تا حد دلخواه افزایش دهیم، اما برای سادگی کار ما تنها از سه جدول استفاده خواهیم‌کرد. جدول نخست، اطلاعات ابتدایی و خام دستورالعمل‌ها را (نظیر نام غذا، تعداد افرادی که با آن غذا سیر می‌شوند و نویسنده دستورالعمل) در خود نگه خواهد داشت؛ جدول دوم اطلاعات مربوط به مواد لازم را در بر‌خواهد داشت و در نهایت جدول سوم، حاوی دستورالعمل پخت غذاها خواهد بود.

ما می‌توانستیم کل پایگاه داده را با یک جدول نیز سروسامان دهیم، اما چنین جدولی بسیار بزرگ می‌شد و پر از اطلاعات تکراری می‌شد. جدول‌های موردنظر ما شبیه شکل ۱ خواهند بود. 
همه این جدول‌ها یک فیلد به نام pkID دارند که همان کلید اولیه منحصر‌به‌فرد است. وجود این فیلد بسیار مهم است، زیرا باعث می‌شود جدول‌های ما اطلاعات کاملاً تکراری نداشته باشند وهمچنین ارتباط بین آن‌ها را فراهم می‌کند. این فیلد به‌صورت خودکار توسط موتور SQLite پر خواهد شد. در جدول Recipes ما از این فیلد برای استخراج اطلاعات مناسب از جدول‌های Instructions و Ingredients استفاده خواهیم کرد. 

جدول طرز تهیه (Instructions) به نسبت ساده است و حاوی متن‌های طولانی و طرز تهیه غذاهای مختلف است. اما جدول مواد لازم (Ingredients) کمی پیچیده‌تر است، زیرا که به همراه نام ماده لازم مقدار آن‌ها نیز باید ذخیره شود.

برنامه‌های مورد نیاز

ابتدا مطمئن شوید، SQLite و APSW را نصب کرده‌اید. به خاطر داشته باشید، مخازن Canonical Partners و Independent باید در تنظیمات اوبونتو فعال شده باشند. در این‌صورت برای نصب برنامه‌های  مورد نیاز در اوبونتو کافی است دستور زیر را در خط فرمان وارد کنید:

sudo apt-get install sqlite , python-apsw

مزیت SQLite این است که این موتور پایگاه داده برای اجرا به سرورهای جداگانه نیاز ندارد و به همین دلیل، برای برنامه‌های کوچک مناسب‌تر است. نکته مثبت دیگر این است که تعداد «انواع داده» یا Data Type‌های آن محدود و ساده است. این انواع عبارتند از Text (متن)، Numeric (عدد)، Blob (داده‌های دودویی) و Integer Primary Key  (کلیدهای اصلی که بعدها درباره آن‌ها توضیح خواهیم داد). مواد لازم، نام غذا و طرز تهیه همه داده‌هایی از نوع Text خواهند بود. اما Blobها نوعی از داده است که می‌تواند شامل هر داده دیجیتالی نظیر عکس و… باشد که ما در این مثال با این نوع کاری نخواهیم داشت. موتور SQLite به‌صورت خودکار یک عدد صحیح منحصر به فرد را به انواع داده Integer Primary Key نسبت خواهد داد. کتابخانه APSW (سرنام Another Python SQLite Wrapper) نیز روش‌هایی ساده برای ارتباط با SQLite را فراهم خواهد آورد.

کمی SQL

پیش از شروع کار باید اندکی درباره کار با زبان SQL بیشتر بدانیم. در این زبان برای دریافت یک رکورد (یک سطر جدول) از یک پایگاه داده از دستور SELECT استفاده می‌کنیم. قالب اجرای این دستور به شکل زیر است:

SELECT [what] FROM [table] WHERE [constrains]

در این قالب کلی، تمام کلماتی که با حروف بزرگ نوشته شده‌اند باید عیناً به همین فرم آورده شوند. عبارت‌های داخل کروشه به ترتیب تعیین‌کننده رکورد موردنظر (what)، جدولی یا جدول‌هایی که رکورد باید از آن‌ها استخراج شود (table) و شرایط انتخاب (constrains) هستند. مثلاً اگر بخواهیم همه فیلدهای جدول دستورالعمل‌ها را بدون هیچ شرطی استخراج کنیم، باید از دستوری به فرم زیر استفاده کنیم:

SELECT * FROM Recipes

و اگر بخواهیم رکوردی را تنها بر‌اساس شماره منحصربه‌فرد آن (مثلاً رکوردی با شماره ۲) استخراج کنیم، از عبارت زیر استفاده می‌کنیم:

SELECT * FROM Recipes WHERE pkID=2

یا به عنوان نمونه‌ای دیگر اگر بخواهیم از تمام دستورالعمل‌های موجود فقط نام غذا و مواد لازم را استخراج کنیم، باید از دستوری به فرم زیر استفاده کنیم:

SELECT name , instructions FROM Recipes

برای درج یا افزودن رکوردی تازه در یک جدول باید از دستور INSERT INTO استفاده کنیم. قالب کلی این دستور مانند زیر است:

INSERT INTO [table name] (field list) VALUES (values to insert)

به عنوان نمونه برای وارد‌کردن یک دستورالعمل جدید در جدول باید دستوری به فرم زیر را اجرا کرد:

INSERT INTO Recipes (name,servings,source) VALUES (“Tacos” , ۴ , “Greg”)

برای پاک‌کردن یک رکورد خاص هم می‌توان از دستور DELETE با فرم زیر استفاده کرد:

DELETE FROM [table] WHERE [constrains]

کدنویسی 

همان‌گونه که پیش‌تر هم  گفته شد، ما در پایگاه داده خودمان سه جدول داریم که می‌توانند از طریق استفاده از فیلد recipeID در هر رکورد که خود به فیلد pkID در جدول اصلی دستورالعمل‌ها ارجاع دارد به هم مرتبط شوند و اکنون زمان آن رسیده تا کدهایی بنویسیم که پایگاه‌داده را ایجاد کرده، جدول‌ها را بسازند و آن‌ها را با داده‌های نمونه پر کنند. اگرچه می‌توانیم این کدها را در برنامه اصلی درج کنیم، اما ترجیح می‌دهیم آن‌ها را به‌صورت جداگانه بنویسیم تا بعدها نیز قابل استفاده باشند. فهرست۱ را در ویرایشگر دلخواه‌تان وارد کرده و آن را با نام db1.py ذخیره و اجرا کنید.

در خط ۱ ما ماجول apsw را import کرده‌ایم تا بتوانیم از توابع فراهم‌شده توسط آن استفاده کنیم. در خط ۳ یک اتصال یا کانکشن به پایگاه داده ساخته‌ایم. این کار باعث می‌شود، اگر پایگاه داده موجود باشد، برنامه آن را برای اجرای عملیات بعدی باز کند و در صورتی که چنین پایگاه داده‌ای موجود نباشد، apsw آن را تولید خواهد کرد. 
در مثال ما، چون این پایگاه داده وجود ندارد، apsw آن را در همان پوشه برنامه ایجاد خواهد کرد. پس از ایجاد پایگاه داده، ما به یک مکان‌نما (cursor) نیاز داریم. مکان‌نما شرایط و ابزار لازم را برای تعامل با پایگاه داده فراهم خواهد آورد. این مکان‌نما در خط ۴  ایجاد شده است. پس از آن نوبت به ایجاد جدول‌ها می‌رسد. 
برای ایجاد جدول دستورالعمل‌ها، در خط ۷ متغیری حاوی یک دستور SQL ایجاد کرده‌ایم و پس از آن در خط بعدی این دستور را اجرا کرده‌ایم. در خطوط بعدی سایر جدول‌ها را نیز به همین طریق ایجاد کرده‌ایم. پس از آن و در خطوط ۲۱ تا ۲۴ با دستور INSERT INTO تعدادی داده اولیه را در این جدول‌ وارد کرده‌ایم. 

import apsw
# Opening/Creating database
connection = apsw.Connection(“cookbook1.db3”)
cursor=connection.cursor()
 
# Creating tables
sql=’CREATE TABLE Recipes (pkID INTEGER PRIMARY\ KEY, name TEXT \
, serves TEXT, source TEXT)’
cursor.execute(sql)
sql=’CREATE TABLE Instructions (pkID INTEGER PRIMARY KEY, Instructions TEXT \
, recipeID NUMERIC)’
cursor.execute(sql)
sql=’CREATE TABLE Ingredients (pkID INTEGER PRIMARY KEY, ingredients TEXT \
, recipeID NUMERIC)’
cursor.execute(sql)
 
# Inserting sample data
sql=’INSERT INTO Recipes (name,serves,source) VALUES (“Spanish Rice” \
,۴,”Greg Walters”)’
cursor.execute(sql)
 
# Getting the last pkID
sql=’SELECT last_insert_rowid()’
cursor.execute(sql)
for x in cursor.execute(sql):
lastid=x[0]
print lastid
 
sql=’INSERT INTO Instructions\(recipeID,Instructions) VALUES \
(%s, “Brown hamburger. Stir in all other ingredi\ents. Bring to boil.\
Stir. Lower to simmer. Cover and cook for 20 min\utes or \
until all liquids absorbed.”)’ %lastid
cursor.execute(sql)
 
sql=’INSERT INTO Ingredients (recipeID , ingredients) VALUES \
(%s , “۱ cup parboiled Rice (uncooked)”)’ %lastid
cursor.execute(sql)
فهرست ۱- کدهای ساخت نخستین پایگاه داده

فقط توجه داشته باشید که فیلد pkID به‌صورت خودکار و توسط موتور SQLite پر خواهد شد. در پایگاه‌های داده، چون ما از نام فیلدها استفاده می‌کنیم، ترتیب وارد کردن آن‌ها اهمیتی نخواهد داشت. هنگامی که ما یک داده را در جدول Recipes وارد می‌کنیم باید عدد pkID منحصربه‌فرد آن را نیز داشته باشیم تا در سایر جدول‌ها نیز برای برقراری ارتباط از آن استفاده کنیم. این کار با دستور SQL زیر قابل انجام است:

SELECT last_insert_rowid()

اما این عملیات ساده، در برنامه ما در خط‌های ۲۷ تا ۳۰ پیاده شده است. دلیل هم این است که ما مقادیر برگشتی جدول را از apsw دریافت می‌کنیم و apsw آن‌ها را به صورت توپل به ما باز می‌گرداند و ما باید عدد مورد نظر را از این توپل استخراج کنیم.  پس از به‌دست آوردن pkID آخرین رکورد وارد شده از آن برای درج مقادیر سایر جدول‌ها استفاده خواهیم کرد. 
تا اینجا ما پایگاه داده و اطلاعات اولیه آن را وارد کرده‌ایم. در قسمت بعدی، به معرفی نحوه کار با این پایگاه داده خواهیم پرداخت.

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

بیشتر بدانید ...