رفتن به مطلب

پست های پیشنهاد شده

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

 

 

این کتاب تلاشی است برای آموزش زبان برنامه‌نویسی پایتون (Python) بر پایه‌ پیاده‌سازی استاندارد آن (CPython)، به شکلی کامل و ساده که بتواند هر دو شاخه از پایتون (نسخه‌های 3x و 2x) را البته با محوریت نسخه 3x پوشش دهد و همچنین برای افرادی که تاکنون سابقه‌ برنامه‌نویسی نداشته‌اند نیز کاربردی و مفید باشد. یادگیری پایتون نیازی به پیش‌زمینه برنامه‌نویسی ندارد و تنها پیش‌نیاز آن علاقه خوانندگان به فن برنامه‌نویسی است.

 

 

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

 

آشنایی

 

تاریخچه

داستان [1] پایتون از اواخر سال ۱۹۸۲ میلادی آغاز می‌شود، سالی که آقای

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
واقع در آمستردام هلند می‌شود.

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
می‌پیوندد. این موضوع از آن جهت دارای اهمیت است که در هنگام کار بر روی این سیستم عامل بود که آقای روسوم به فکر ایجاد یک زبان اسکریپتی (Scripting Language) جدید می‌افتد.

 

در دسامبر سال ۱۹۸۹ میلادی، تعطیلات کریسمس فرصتی می‌شود تا آقای روسوم به ایده سرگرم کننده‌ [2] خود بپردازد. البته پس از آن نیز زمان زیادی از وقت‌های آزاد خود را برای پیشرفت پروژه‌ای که ”Python“ نامیده بود صرف می‌کند. در این مسیر، تجربه‌ کار بر روی زبان ABC و همینطور مطالعات وی بر روی زبان‌

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
نقش فراوانی داشته است، در‌ واقع او یک نسخه‌ شخصی از بخش‌های مورد علاقه‌ خود از ABC ایجاد نمود. او یک ماشین مجازی ساده، یک تجزیه‌کننده (پارسرParser) ساده و یک سیستم زمان‌اجرا (Runtime System) ساده ایجاد کرد؛ یک زبان با نحو (سینتکس Syntax) اولیه که از تو‌رفتگی (Indentation) برای بلاک‌بندی بهره می‌برد و از انواع داده [3] دیکشنری، لیست، رشته و اعداد پشتیبانی می‌کرد و بر خلاف ABC توسعه‌پذیر می‌بود.

 

یک سال بعد آقای روسوم از پایتون در پروژه‌ آمیب استفاده می‌کند؛ نتیجه‌ مطلوب و نیز بازخورد آن در بین همکارانش موجب می‌شود تا وی به بسیاری از بهینه سازی‌های اولیه در پایتون اقدام نماید. این روند ادامه می‌یابد تا اینکه سرانجام در ماه دوم از سال ۱۹۹۱ میلادی این زبان را با نسخه 0.9.0 و تحت پروانه‌ای مشابه با پروانه‌

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
از طریق یکی از «گروه‌های خبری» (یوزنت Usenet) با عنوان

محتوای مخفی

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

 

منشا انتخاب نام پایتون توسط آقای روسوم برخلاف تصور عمومی یا آنچه که از لوگوی آن مشاهده می‌شود به نوع خاصی از مار مربوط نمی‌شود!؛ در حقیقت این نام برگرفته از یک سریال کمدی تولید انگلستان با عنوان ”

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
“ می‌باشد که پخش اصلی آن در طی سال‌های ۱۹۶۹ تا ۱۹۷۴ میلادی از شبکه‌ BBC One بوده است.

 

--------------------

[1] برگرفته از نوشته‌های وبلاگ [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
] و همینطور مصاحبه‌ [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]

[2] ”...در دسامبر سال ۱۹۸۹ دنبال یک پروژه‌ برنامه‌نویسی به عنوان سرگرمی می‌گشتم تا اوقات فراغت به وجود آمده از تعطیلات کریسمس را پر کنم. دفتر کارم (یک آزمایشگاه تحقیقاتی دولتی در آمستردام) بسته بود، ولی یک رایانه‌ شخصی داشتم و چیزی بیش از این هم در اختیارم نبود. تصمیم گرفتم تا مفسری برای یک زبان اسکریپتی جدید بنویسم. قبلا در مورد آن فکر کرده بودم: از نسل زبان ABC و جذاب برای هکرهای Unix/C. نام پایتون را برای عنوان کاری این پروژه انتخاب کردم، کمی گستاخانه ( و یک طرفدار بزرگ Monty Python’s Flying Circus)...“ - نقل از آقای روسوم [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]

[3] در دروس آینده به انواع داده (Data Types) در زبان پایتون به صورت کامل پرداخته می‌شود. البته خواهید دید که این مبحث در پایتون با عنوان «انواع شی» ارايه می‌گردد.

  • Like 3

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

توصیفی کوتاه

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

 

زبان برنامه‌نویسی پایتون همانطور که اشاره شد در سال ۱۹۹۱ میلادی توسط آقای روسوم خلق شده و توسعه‌ آن نیز زیر نظر مستقیم اوست. آقای روسوم زاده‌ سال ۱۹۵۶ میلادی و نخستین دارنده‌ عنوان

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(دیکتاتور خیرخواه جاویدان)‌ می‌باشد و هم اکنون (سال ۲۰۱۵) در شرکت Dropbox مشغول به کار است. (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)

 

توسعه‌ پایتون با عصر توسعه و محبوبیت زبان‌های متن باز دیگری همچون Tcl ،Perl و Ruby هم‌ زمان بوده که این امر به پیشرفت و توسعه‌ آن کمک زیادی کرده است.

 

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

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(پای‌کان) می‌باشد که خوشبختانه ‌در ایران (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) نیز برگزار می‌شود.

 

این زبان تاکنون توسط شرکت یا سازمان‌های مطرح زیادی مورد استفاده قرار گرفته و در برنامه‌های کاربردی زیادی نیز از آن استفاده شده است که از جمله این موارد می‌توان به: reddit ،Pinterest ،Instagram (شبکه‌های اجتماعی) / Google (موتور جستجوگر و نیز سرویس یوتیوب) / Yahoo (سرویس نقشه) / IBM ،Intel ،Cisco ،Seagate (تست سخت‌افزار) / Dropbox (سرویس میزبانی ابری فایل) / EVE Online (بازی‌های آنلاین) / NASA ،Los Alamos (امور علمی) / iRobot (رباتیک) / Pixar ،Industrial Light and Magic ،Walt Disney (ساخت فیلم‌های انیمیشن) / BitTorrent (اشتراک فایل نظیر به نظیر) / CIA (وب‌سایت) / PayPal (سیستم انتقال پول آنلاین) / Mercurial (سیستم کنترل نسخه) / ESRI (نقشه‌برداری در برنامه GIS) و بسیاری دیگر [4] اشاره نمود. (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)

 

یک نکته مهم در مورد زبان برنامه‌نویسی پایتون، انواع پیاده‌سازی‌ (Implementation)‌ آن است. تا‌کنون از این زبان پیاده‌سازی‌های گوناگون و با اهداف متفاوتی توسعه یافته است که از این بین می‌توان به

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(خاص ماشین مجازی جاوا)،

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(خاص چارچوب NET. مایکروسافت)،

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(با هدف سرعت اجرای بیشتر)،

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(با هدف اجرای بهتر برنامه‌های چند‌نخی) و البته

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
اشاره نمود. [5]

 

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

 

توجه داشته باشید، پایتون (Python) نام یک زبان برنامه‌نویسی است و CPython (یا دیگر پیاده‌سازی‌‌های زبان پایتون) در واقع برنامه‌ایست که توسط آن می‌توان کد منبع (سورس کد Source Code) یک برنامه به زبان پایتون را اجرا نمود. به بیانی دیگر CPython یک پردازنده‌ برای زبان پایتون است.

 

-------------------------------

[4] برای مشاهده‌ موارد استفاده بیشتر پایتون می‌توانید به صفحه‌های [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
] و [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
] مراجعه نمایید.

[5] موارد بیشتر در [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]

  • Like 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ویژگی ها

پایتون یک زبان برنامه‌نویسی رایگان، متن باز (Open Source) و با بیانی کامل‌تر، آزاد است که هم‌‌اکنون (یعنی از نسخه‌ 2.1 و جدیدتر) پروانه‌ آن توسط «بنیاد نرم‌افزار پایتون»

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
است، با این حال به برنامه‌نویس این اجازه را می‌دهد که بتواند برنامه‌ای با سورس بسته (Closed Source) تولید نماید.

 

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

 

این زبان خیلی پیش‌تر از آنکه حتی

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
و

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
از Open Source صحبت کنند، متن باز بوده است.

 

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
).

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

Machine

 

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

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) یا مفسر (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) انجام می‌پذیرد.

 

پایتون یک زبان برنامه‌نویسی چند‌ الگویی (Multi-Paradigm) است و برنامه‌نویس را مجبور به رعایت الگوی خاصی نمی‌کند. این زبان از الگوهای: دستوری (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) یا رویه‌ای (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)، تابعی (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) و شی‌گرایی (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) پشتیبانی می‌کند؛ البته همانظور که گفته شد نمی‌توان پایتون را به صورت خالص (Pure) متعلق به هر یک از این الگوها دانست [10].

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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

 

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

 

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

محتوای مخفی

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

 

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

 

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

 

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

 

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

 

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
نشان می‌دهند: کاری که یک برنامه‌نویس پایتون می‌تواند در مدت زمان دو ماه به انجام برساند، دو برنامه‌نویس ++C در مدت یک سال قادر به تکمیل آن نخواهند بود!

 

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

 

----------------------------------

[6] این‌ها در واقع ماژول یا کتابخانه‌هایی هستند که توسط افراد و تیم‌هایی مستقل و خارج از مجموعه‌ اصلی توسعه‌ پایتون، ایجاد و توسعه داده می‌شوند. برای دانستن بیشتر می‌توانید به [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
] مراجعه نمایید.

[7] متغیر در پایتون، نامی است که به یک شی (Object) در حافظه اشاره می‌کند. (در دروس آینده به آن پرداخته خواهد شد)

[8] از نسخه 2.0 و جدیدتر به پایتون (پیاده‌سازی CPython) افزوده شده است.

[9] دسته‌بندی رایج دیگر، بر مبنای نسل (Generation) است. زبان‌های نسل اول زبان‌های ماشین، نسل دوم زبان‌های اسمبلی، نسل سوم زبان‌های سطح بالایی مانند C# ،C++ ،C ،Lisp ،Cobol ،Fortran و Java هستند. زبان‌های نسل چهارم آن‌هایی هستند که برای کاربرد‌هایی خاص طراحی شده‌اند مانند NOMAD برای تولید گزارش، SQL برای پرس و جوهای (Queries) پایگاه‌ داده و Postscript برای قالب‌بندی متن. اصطلاح زبان نسل پنجم به زبان‌های مبتنی بر منطق و شرط (logic- and constraint-based) مانند Prolog و OPS5 گفته می‌شود. (آورده شده از کتاب: کامپایلرها... نوشته Aho و...، ویرایش دوم، صفحه ۱۳) - زبان پایتون یک زبان همه منظوره است و در دسته زبان‌های نسل سوم قرار می‌گیرد،‌ هر چند که نسبت به برخی از زبان‌های این نسل سطح بالاتری دارد.

[10] با توجه به نوشته‌ Jeremy Jones با عنوان

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
.

[11] منظور از ماشین مجازی در اینجا ”Process Virtual Machine“ است و نباید با «ماشین مجازی سیستمی» (System Virtual Machine) اشتباه گرفته شود.

[12] برای نمونه: این کار در زبان Pascal توسط کلمات Begin و End، در زبان‌های C و Java توسط آکولاد { } صورت می‌گیرد.

  • Like 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کارایی

معمولا افراد در مواجه با یادگیری زبان پایتون نگرانی‌هایی در مورد کارایی (Performance) برنامه‌های توسعه یافته با این زبان خواهند داشت به خصوص در جایگاه مقایسه با زبان Java، به هر حال پایتون یک زبان تفسیر‌شده است و در اجرا سرعت کمتری نسبت به زبان‌های کامپایل‌شده مانند C و Java خواهد داشت. معمولا کارایی بالا برابر با سرعت بالاست ولی قضاوت در مورد کارایی به این سادگی درست نیست!

 

در هر پروژه‌ای بسته به چیزی که می‌خواهیم می‌بایست انتخاب نماییم. اگر مبنای کارایی برای یک پروژه در سرعت بالای اجرا باشد (مانند برنامه‌های سیستمی)؛‌ زبان C همیشه بهترین انتخاب است ولی اگر مبنا در سرعت بالای توسعه و صرفه جویی در منابع از جمله هزینه باشد انتخاب مناسب پایتون است. گاهی نیز بهترین کارایی با استفاده ترکیبی از زبان‌های متفاوت به دست می‌آید.

 

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

محتوای مخفی

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

 

لازم است به این نکته هم توجه داشته باشیم که تمام این صحبت‌ها در مورد پیاده‌سازی CPython از زبان پایتون بوده و پیاده‌سازی‌های دیگری نیز از زبان پایتون با هدف سرعت بالای اجرا (به مانند

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) توسعه یافته است.

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

نسخه ها

هم اکنون دو شاخه از پایتون به صورت موازی (Parallel) در کنار یکدیگر در دسترس هستند: نسخه‌های 2x و 3x.

 

در یک سیر تاریخی، نسخه‌ پایدار 2.0 در شانزدهم اکتبر سال ۲۰۰۰ میلادی و در ادامه‌ نسخه 1.6 منتشر (Release) می‌شود؛ پس از آن نیز توسعه‌ پایتون به همان صورت پیشین ادامه می‌یابد تا این که در دسامبر سال ۲۰۰۸ میلادی نسخه‌ای از پایتون با شماره‌ 3.0 که از آن با عنوان ”Python 3000“ یا ”Py3K“ نیز یاد می‌شود، با رویکرد شکستن «سازگاری با نسخه‌های پیشین» (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) منتشر می‌گردد. به بیان دیگر: مفسر نسخه‌های جدید (3x) پایتون قادر به اجرای سورس کدی که بر پایه‌ مفسر نسخه‌های پیشین تهیه شده است، نخواهد بود. (که این اتفاق در جامعه پایتون بسیار بحث برانگیز بوده و هست!)

 

ظاهرا آقای روسوم خیلی پیش از این زمان نیاز به ایجاد یک سری تغییرات در ساختار و سینتکس این زبان را احساس کرده بود. شاید نخستین نشانه‌ از لزوم ایجاد تغییرات در پایتون را بتوان از صحبت‌های ایشان در همایش متن باز اوریلی (OSCON) سال ۲۰۰۲ با عنوان «پشیمانی‌های پایتون» (Python Regrets) دریافت کرد. به هر صورت تیم توسعه‌ پایتون در پی رفع این نیاز، از بین حفظ گذشته‌ پایتون و پایبندی به فلسفه‌ سادگی آن؛ دومی را انتخاب می‌کند، ویژگی‌های کهنه کنار گذاشته و ویژگی‌های جدید جایگزین می‌گردند.

 

با انتشار یک نسخه‌ جدید به صورت معمول می‌بایست توسعه‌ نسخه‌ قدیمی متوقف شود، ولی از آنجا که زیر‌ساخت شرکت‌های بزرگی به پایتون وابسته بوده (مانند Google) و ارتقا نسخه برای آن‌ها حداقل بسیار زمان‌بر خواهد شد، برنامه‌ها و کتابخانه‌های کوچک و بزرگ بسیار زیادی توسط کاربران جامعه‌ پایتون برای نیاز‌های ریز و کلان گوناگونی توسعه یافته است که سازگار شدن تمام آن‌ها با نسخه‌ جدید پایتون بعید به نظر می‌رسد و از همه مهم‌تر خود برنامه‌نویسان پایتون می‌باشند که پس از سال‌ها اکنون مجبور هستند کارهای دیروز خود را با سینتکس و در مواقعی حتی با کتابخانه و ماژول‌هایی متفاوت به انجام برسانند؛ تیم توسعه‌ پایتون، برای پر کردن شکاف به وجود آمده بین دیروز و امروز پایتون یا به بیانی هموار کردن مسیر مهاجرت به نسخه‌ جدید پایتون،‌ علاوه بر اینکه از پیش سعی کرده بود تا ویژگی‌های جدید و سینتکس نسخه‌ 3.0 را به نسخه‌ 2.6 (که دو ماه زودتر منتشر شده بود) پورت (Port) کند، به توسعه‌ نسخه قدیمی پایان نمی‌دهد و نسخه‌ دیگری را با شماره‌ 2.7 در سوم جولای ۲۰۱۰، تقریبا یک سال پس از انتشار نسخه‌ 3.1 به همراه بسیاری از ویژگی‌های جدید آن منتشر می‌سازد.

 

بر طبق سند [13]

محتوای مخفی

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

 

نسخه‌ پایدار (Stable) پایتون با قالب A.B.C؛ مانند 3.4.2 شماره‌‌گذاری و منتشر می‌شود. عدد A، بخش اصلی (Major) شماره نسخه است و زمانی افزایش می‌یابد که واقعا تغییرات بزرگ و زیادی در زبان پایتون ایجاد شده باشد. عدد B، بخش جزئی (Minor) شماره نسخه را نشان می‌دهد و با ایجاد یک سری تغییرات مهم در زبان پایتون افزایش خواهد یافت. عموما شماره‌ نسخه‌ پایتون تنها به صورت A.B نشان داده می‌شود، زیرا عدد C تنها با رفع اشکال (Bug) احتمالی نسخه‌ منتشر شده افزایش می‌یابد (از عدد صفر) که این امر نیز شامل همه‌ نسخه‌های پایتون نمی‌شود.

 

کدام نسخه؟ برای شروع یادگیری و اهداف آموزشی نسخه‌ 3x مناسب است و در صورت نیاز تنها با مطالعه‌ مقایسه بین این دو نسخه می‌توانید با نسخه‌ قدیمی نیز آشنا شوید. همچنین اگر قصد توسعه‌ برنامه‌های دسکتاپ را داشته (یعنی زمانی که محدود به نسخه‌ نصب شده بر روی سرور نیستید) یا مواقعی که در ایجاد برنامه‌ خود نیازی به کتابخانه‌هایی که هنوز (اوایل ۲۰۱۵) با نسخه‌ 3x سازگار نشده‌اند (مانند Twisted) را ندارید؛‌ استفاده از نسخه‌ 3x بسیار خوب است. به هر حال تلاش می‌شود که این کتاب بتواند به دور از آشفتگی هر دو نسخه را پوشش دهد.

 

-------------------------------

[13] PEPs یا Python Enhancement Proposals (طرح‌های توسعه‌ پایتون) در واقع مجموعه اسنادی است که تیم توسعه‌ پایتون از آن‌ها برای توصیف شیوه‌ طراحی، ویژگی‌های جدید یا منطق، فرآیند و راهبردهای آینده پایتون استفاده می‌کنند. فهرست:

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.

 

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

محتوای مخفی

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

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

نصب و راه اندازی

در این درس به چگونگی نصب و راه‌اندازی پایتون در دو سیستم عامل ویندوز و گنولینوکس پرداخته و در پایان نیز توضیح مختصری از «سیستم مدیریت بسته» پایتون ارایه شده است.

 

دانلود

برای ترجمه و اجرای سورس کد ایجاد شده به زبان پایتون لازم است «بسته نصبی پایتون» (همان CPython یا اگر ساده بگوییم: پایتون) که شامل مفسر، کتابخانه استاندارد، برنامه

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(ویرایشگر پیش‌فرض پایتون) و... است را دانلود و بر روی سیستم عامل نصب نماییم.

 

پایتون (Python) نام یک زبان برنامه‌نویسی است. به این معنی که ساختاری برای بیان ایده‌ها یا فرمان‌های برنامه‌نویس به ماشین می‌باشد. برای فهماندن فرمان‌های پایتونی به ماشین، مانند هر زبان سطح بالای دیگری نیاز به یک «پردازنده‌ زبان» (Language Processor) است. برنامه‌ CPython پردازنده استاندارد زبان پایتون است که از آن به صورت ساده با همان نام Python یاد می‌شود.

 

در هر سیستم عاملی ممکن است پایتون از پیش نصب باشد (خصوصا در گنولینوکس) که در صورت رضایت از نسخه‌ موجود، دیگر لزومی به دانلود و نصب آن نخواهد بود؛ برای آگاهی یافتن از این موضوع می‌توانید دستور python --version را در خط فرمان سیستم عامل وارد نمایید؛ البته در ویندوز به دلیل اینکه عملکرد این دستور وابسته به دستکاری متغیر Path می‌باشد، بهتر است از مسیر Control Panel >‌ Programs and Features اقدام نمایید.

 

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
یکی از «متغیر‌های محیطی» (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) سیستم عامل است. این متغیر حاوی فهرست دایرکتوری‌هایی می‌باشد که سیستم عامل در آن‌ها به دنبال یک فایل اجرایی هم نام با دستور وارد شده در خط فرمان می‌گردد.

 

هم اکنون این بسته بر پایه دو نسخه‌ متفاوت پایتون (2x و 3x) از

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(با قالب msi) و متناسب با دو معماری 32 (x86) و 64 (AMD64 ،EM64T ،x64 ،x86-64) بیتی منتشر می‌گردد و در صورت نیاز برای نصب آن در گنو‌لینوکس می‌بایست

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(که به زبان C است) را دانلود نمایید.

 

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

 

در هنگام نگارش این درس دو نسخه‌ 2.7.9 و 3.4.2 جدیدترین نسخه‌های منتشر یافته‌ پایتون هستند. برای دسترسی به جدید‌ترین ویژگی‌ها، پیشنهاد می‌شود همیشه جدیدترین نسخه‌ موجود از پایتون را دانلود نمایید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

نصب در ویندوز

درست به مانند هر برنامه‌ دیگری در ویندوز، نصب به راحتی تنها با چند بار کلیک بر روی دکمه‌ Next به پایان می‌رسد. پیشنهاد می‌شود مسیر پیش‌فرض نصب (مثلا برای نصب نسخه‌ 3.4.2:‌ \C:\Python34) را تغییر ندهید.

 

در هنگام نصب نسخه‌‌ای که قصد دارید از آن به صورت نسخه‌ پیش‌فرض پایتون خود استفاده نمایید، به این نکته توجه داشته باشید که در مرحله‌ سفارشی‌سازی (Customize) گزینه‌ افزودن خودکار مسیر مفسر پایتون به متغیر Path ویندوز را فعال نمایید (همانند تصویر پایین). در این صورت با وارد کردن دستور python در خط فرمان ویندوز، مفسر پایتون (این نسخه) فراخوانی می‌شود. برای شروع، با وارد کردن دستور python –V یا python --version می‌توانید از نسخه‌ پایتون نصب شده آگاهی یابید:

crc2mip7a0reqb706dwa.png

> python --version
python 3.4.2

 

در صورت تنظیم نبودن متغیر Path می‌بایست از طریق پنجره خط فرمان و دستور cd به مسیر نصب مفسر پایتون وارد شوید:

> python --version
'python' is not recognized as an internal or external command, operable program or batch file.

> cd C:\Python34\

> python --version
python 3.4.2

 

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

 

سیر Control Panel > System > Advanced system settings > Advanced را طی کرده و سپس با کلیک بر روی Environment Variables پنجره‌ جدیدی باز می‌گردد که در قسمت System variables آن Path را پیدا و انتخاب نمایید. بر روی Edit در پایین همان پنجره کلیک کرده و عبارت ;C:\Python34;C:\Python34\Scripts (برای نسخه 3.4) یا ;C:\Python27;C:\Python27\Scripts (برای نسخه 2.7) را به ابتدای متن موجود در قسمت Variable value پنجره‌ جدید وارد و سپس بر روی دکمه‌ OK کلیک نمایید. :)

jg19fkf4vjaazgscgn5.png

 

در ویندوز از کاراکتر نقطه‌ ویرگول (سمی‌کالن Semicolon) یا ; برای جدا‌سازی مسیر دایرکتوری‌ها در متغیر path استفاده می‌گردد. C:\Python34 از عبارت یاد شده، مشخص کننده‌‌ مسیر مفسر پایتون (python.exe) است و با توجه به افزوده شدن pip (سیستم مدیریت بسته‌‌ پایتون) به بسته نصبی پایتون از نسخه‌ 3.4 به بعد، C:\Python34\Scripts نیز به منظور ایجاد امکان دسترسی و فراخوانی آن (pip.exe یا pip3.exe یا pip3.4.exe - فرقی ندارند) افزوده می‌شود.

 

اگر بخواهیم بر روی یک ویندوز از هر دو شاخه پایتون نسخه‌ای یا حتی چند نسخه‌ متفاوت از هر یک به مانند نسخه‌های 2.6، 2.7، 3.3 و 3.4 را نصب نماییم؛ یک راه خوب برای فراخوانی مفسر پایتونِ هر یک از آن‌ها در خط فرمان ویندوز، استفاده از راه‌انداز پایتون (Python Launcher) می‌باشد. در این راهکار نیازی به دستکاری متغیر Path نیست و از دستور py به جای دستور python استفاده می‌شود؛ به این صورت که با دستور py یا py -2 مفسر آخرین نسخه‌ موجود از شاخه 2x پایتون و با دستور py -3 نیز مفسر آخرین نسخه‌ موجود از شاخه 3x پایتون فراخوانی می‌گردد. برای فراخوانی مفسر دیگر نسخه‌ها هم می‌بایست نسخه‌ آن‌ها به صراحت ذکر گردد (مانند: py -3.3 و py -2.6):

> py --version
2.7.9
> py -2 --version
2.7.9
> py -2.6 --version
2.6.6
> py -3 --version
3.4.2
> py -3.3 --version
3.3.5

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

نصب در گنولینوکس

پایتون معمولا در توزیع‌های گنولینوکس از پیش نصب می‌باشد (بر روی برخی نیز از هر دو شاخه آن نسخه‌ایی نصب است؛ به مانند: Ubuntu و Fedora). برای اطمینان کافی است دستورات python2 --version (برای نسخه 2x) و python3 --version (برای نسخه 3x) را در خط فرمان سیستم عامل وارد نمایید؛ به عنوان نمونه وضعیت نسخه‌های پایتون در Ubuntu 14.04 به صورت پایین است:

 

user> python --version
python 2.7.6

user> python2 --version
python 2.7.6

user> python3 --version
python 3.4.0

 

از آنجا که هنوز (اوایل ۲۰۱۵) نسخه‌ 2x، نسخه‌ پیش‌فرض پایتون در اکثر توزیع‌های گنولینوکس است، بنابراین دستور python --version نیز موجب فراخوانی مفسر پایتون نسخه‌ 2x و نمایش نسخه‌ آن می‌شود.

 

محتوای مخفی

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

 

در دستورات یاد شده به جای version-- می‌توان از V- (حرف v بزرگ انگلیسی) نیز استفاده نمود.

 

اکنون با فرض اینکه توزیع مورد استفاده‌‌، از پیش فاقد نسخه‌ 3x بوده یا اینکه نسخه‌ نصب شده آنقدر قدیمی است که می‌بایست آن را ارتقا (Upgrade) داد؛ پس از دانلود سورس کد نسخه‌ جدید (در این زمان فایل: Python-3.4.2.tar.xz) به صورت زیر عمل خواهیم کرد (نصب نسخه‌ 2x نیز به همین شکل است):

 

نخست می‌بایست تمام بسته‌های پیش‌نیاز در سیستم عامل نصب گردند. برای این منظور می‌توانید دستورات پایین را (متناسب با نوع توزیع خود) در خط فرمان سیستم عامل وارد نمایید:

 

در Fedora:

user> sudo dnf update
user> sudo dnf install make automake autoconf pkgconfig glibc-devel gcc gcc-c++ bzip2 bzip2-devel tar tcl tcl-devel tix tix-devel tk tk-devel zlib-devel ncurses-devel sqlite-devel openssl-devel openssl readline-devel gdbm-devel db4-devel expat-devel libGL-devel libffi-devel gmp-devel valgrind-devel systemtap-sdt-devel xz-devel libX11-devel findutils libpcap-devel

 

در Ubuntu:

user> sudo apt-get update
user> sudo apt-get install build-essential
user> sudo apt-get install make automake autoconf pkg-config libc6-dev gcc g++ bzip2 libbz2-dev tar tcl tcl-dev tix-dev tk tk-dev zlib1g-dev libncursesw5-dev libsqlite3-dev libssl-dev openssl libreadline-dev libgdbm-dev db4.8-util libexpat1-dev libgl-dev libffi-dev libgmp3-dev valgrind systemtap-sdt-dev xz-utils libX11-dev findutils libpcap-dev

 

پس از اطمینان از نصب بسته‌های پیش‌نیاز به مسیری که سورس کد پایتون (پس از دانلود) در آن قرار دارد رفته (در اینجا: دایرکتوری Downloads) و فایل سورس کد را از حالت فشرده خارج نمایید. حاصل کار یک دایرکتوری جدید با نامی مشابه Python-3.4.2 است که با استفاده از دستور ls قابل مشاهده است؛ اکنون می‌بایست از طریق خط فرمان و دستور cd وارد مسیر آن شوید.

 

user> cd Downloads/
user> ls
Python-3.4.2.tar.xz

user> tar xf Python-3.4.2.tar.xz

user> ls
Python-3.4.2  Python-3.4.2.tar.xz

user> cd Python-3.4.2/

 

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

 

user> sudo ./configure
user> sudo make
user> sudo make install

 

اگر پیش از این نسخه‌ای از شاخه 3x پایتون نصب باشد (مانند 3.3)، دستور سطر سوم موجب جایگزین شدن نسخه‌ جدید (3.4) با آن می‌شود؛ این دستور در مواقع ارتقا نسخه پایتون مفید است. چنانچه قصد دارید همچنان به نسخه‌ پیشین نیز دسترسی داشته باشید، دستور make altinstall را جایگزین make install نمایید. به عنوان نمونه وضعیت نسخه‌ 3x پایتون، در زمان‌ قبل و بعد از نصب نسخه‌ جدید به همراه مسیر نصب آن در Fedora 20 آورده شده است. به تفاوت عملکرد دو دستور make altinstall و make install توجه نمایید:

 

گرفتن نسخه‌های از پیش نصب:

 

user> python --version
Python 2.7.5

user> python2 --version
Python 2.7.5

user> python3 --version
Python 3.3.2

 

گرفتن مسیر و نسخه‌ پایتون 3x پس از نصب نسخه 3.4.2 با استفاده از دستور make altinstall :

 

user> which python3
/usr/bin/python3

user> which python3.4
/usr/local/bin/python3.4

user> python3 --version
Python 3.3.2

user> python3.4 --version
Python 3.4.2

 

گرفتن مسیر و نسخه‌ پایتون 3x پس از نصب نسخه 3.4.2 با استفاده از دستور make install :

 

user> which python3
/usr/local/bin/python3

user> which python3.4
/usr/local/bin/python3.4

user> python3 --version
Python 3.4.2

user> python3.4 --version
Python 3.4.2

 

در روشی دیگر برای نصب کردن چندین نسخه‌ متفاوت از یک شاخه پایتون، می‌توان هر یک را در محل مشخصی از دیسک نصب نمود. برای این منظور می‌بایست از دستوراتی مشابه پایین استفاده نمایید:

user> sudo ./configure --prefix=/opt/python3.4
user> sudo make
user> sudo make install

 

عبارت opt/python3.4/ در سطر یکم، مشخص کننده‌‌ محل نصب پایتون است که به دلخواه خود کاربر تعیین می‌گردد.

 

در صورت استفاده از این روش، مفسر پایتون نسخه نصب شده را می‌توان مشابه هر یک از دو دستور زیر (با ذکر مسیر نصب - در اینجا: opt/python3.4/)‌ فراخوانی نمود:

 

user> /opt/python3.4/bin/python3 --version
Python 3.4.2
user> /opt/python3.4/bin/python3.4 --version
Python 3.4.2

 

برای راحتی در فراخوانی می‌توانید نشانی دایرکتوری مفسر پایتون را به متغیر محیطی Path سیستم عامل اضافه نمایید. برای این کار فایل پنهان bashrc. (البته چنانچه از پوسته پیش‌فرض یعنی bash استفاده می‌کنید) موجود در دایرکتوری home (مسیر ~) را توسط یک ویرایشگر متن، باز نموده و عبارتی مشابه پایین را در آن وارد و سپس تغییر ایجاد شده را ذخیره (Save) نمایید:

 

export PATH=$PATH:/opt/python3.4/bin

 

اکنون برای فراخوانی پایتون نصب شده دیگر نیازی به وارد کردن مسیر آن نمی‌باشد ولی به خاطر داشته باشید به دلیل وجود نسخه 3x ای که از پیش نصب بوده (در اینجا: 3.3.2) لازم است نسخه جدید را با ذکر صریح نسخه فراخوانی نمایید:

 

user> python3 --version
Python 3.3.2
user> python3.4 --version
Python 3.4.2

 

به صورت کلی برای فراخوانی پایتون نسخه 3x از یکی از دستورات python3.4 ،python3 یا python3.x که x بیانگر بخش جزئی نسخه پایتون می‌باشد و برای نسخه 2x نیز از دستورات python2.7 ،python2 ،python یا python2.x استفاده می‌گردد. در این راستا چنانچه پایتون در مسیری خاص نصب گردد لازم است مسیر آن به متغیر Path اضافه شود. برای فراخوانی pip و IDLE هر نسخه نیز از همین رویه پیروی می‌شود.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سیستم مدیریت بسته

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(پِپ) سیستم مدیریت بسته‌‌ پایتون است. pip ابزاری است مبتنی بر خط فرمان که از آن برای نصب، حذف، بروز رسانی و در کل مدیریت بسته‌های (یا کتابخانه‌ها‌ی شخص ثالث) پایتون استفاده می‌گردد. برنامه‌نویس پس از یافتن بسته‌ مورد نیاز خود در PyPI یا وب‌سایت‌ها و سرویس‌های دیگری به مانند github.com و bitbucket.com می‌تواند به وسیله دستور pip در خط فرمان، اقدام به نصب آن در پایتون نماید.

 

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(پای‌پِ) یا مخزن بسته‌های پایتون (Python Package Index) محلی است که بسیاری از کتابخانه‌ها یا برنامه‌های شخص ثالث پایتون در آن نگه داری می‌شود. کاربران پایتون می‌توانند از طریق PyPI پروژه (یا بسته) خود را منتشر یا اقدام به جستجو و دانلود بسته‌های مورد نیاز خود نمایند.

 

pip از زمان انتشار نسخه‌ 3.4 به بسته‌ نصبی پایتون افزوده شده است و به همراه آن نصب می‌شود ولی در صورت نیاز به pip برای نسخه‌های قدیمی‌تر، می‌بایست آن را به صورت جداگانه‌ نصب نمایید.

 

نسخه 2.7.9 پایتون پس از نسخه 3.4 منتشر شده است؛ بنابراین با نصب این نسخه و نسخه‌های جدیدتر آن از شاخه 2x پایتون نیز pip در دسترس خواهد بود.

 

برای نصب pip لازم است تا فایل

محتوای مخفی

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

 

سپس به وسیله‌ دستوری مشابه python get-pip.py در خط فرمان، با سطح کاربری Administrator (در ویندوز) یا root (در گنولینوکس) می‌توانید اقدام به نصب pip نمایید. فراموش نشود، در زمان نصب نیاز به اتصال اینترنت می‌باشد.

 

منظور از python در دستور python get-pip.py، فراخوانی مفسر پایتون نسخه‌ایست که قصد داریم pip را در آن نصب کنیم.

 

برای نمونه؛ با فرض دانلود بودن get-pip.py و قرار داشتن آن در دایرکتوری Downloads سیستم عامل،‌ برای نصب pip در نسخه 3x (مثلا قدیمی!) پایتون به صورت پایین عمل می‌نماییم:

 

در گنولینوکس:

user> cd Downloads/
user> sudo python3 get-pip.py

[...]
Successfully installed [...]

user> pip3 --version
pip 7.0.1 [...]

 

در ویندوز:

> cd Downloads\
> python get-pip.py

[...]
Successfully installed [...]

> pip --version
pip 7.0.1 [...]

 

توجه داشته باشید که پیش از این، محل نصب پایتون نسخه 3x به ترتیبی که گفته شد به متغیر Path ویندوز افزوده بودیم و cmd نیز به صورت Administrator اجرا شده است.

 

کار با pip بسیار آسان است. به عنوان نمونه برای نصب

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
که یک وب فریم‌ورک (Web Framework) برای پایتون است از دستور pip install bottle استفاده می‌گردد. با وارد کردن این دستور، Bottle در PyPI (به عنوان مخزن پیش‌فرض pip) جستجو می‌شود و پس از یافتن، ابتدا دانلود، سپس نصب و به دایرکتوری site-packages پایتون افزوده می‌شود.

 

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
مراجعه نمایید.

 

نصب آخرین نسخه از یک بسته:

# pip install [package name]

root> pip install SomePackage

 

نصب یک نسخه خاص از یک بسته:

# pip install [package name]==[version]

root> pip install SomePackage==1.0.4

 

حذف یک بسته:

# pip uninstall [package name]

root> pip uninstall SomePackage

 

بروز رسانی یک بسته:

# pip install --upgrade [package name]

root> pip install --upgrade SomePackage

 

برای بروز رسانی خود pip نیز از همین الگو استفاده می‌شود: pip install --upgrade pip

 

البته در ویندوز می‌بایست از دستور python -m pip install -U pip استفاده نمایید.

 

به جای upgrade-- می توانید از U- نیز استفاده نمایید.

 

 

گرفتن فهرست تمام بسته‌های نصب شده:

user> pip list

 

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

user> pip list --outdated

 

مشاهده جزییات یک بسته نصب شده:

# pip show [package name]

user> pip show SomePackage

 

نصب تمام بسته‌هایی که درون یک فایل متنی به مانند requirements.txt مشخص شده است (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
):

root> pip install -r requirements.txt

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ایجاد و اجرای پروژه

این درس به چگونگی ایجاد پروژه‌‌های برنامه‌نویسی پایتون و اجرای آن‌ها اختصاص یافته است. درس با بیان تعاریف و رسم ساختار معمول یک پروژه شروع و اشاره‌ای نیز به ساختار پروژه‌های قابل انتشار در PyPI می‌شود. در بخش یکم تلاش شده است که تصویر کاملی از ساختار یک پروژه در ذهن خواننده ایجاد و از این طریق او با تعاریف «بسته»، «ماژول» و «اسکریپت» در زبان پایتون آشنا شود. در دو بخش‌ بعدی نیز ضمن اشاره به دو شیوه‌ اجرای دستورات پایتون، به شیوه ایجاد اسکریپت و چگونگی اجرای آن تمرکز شده است؛ چرا که پروژه‌های پایتون به این شیوه اجرا می‌گردند. در ادامه هم به روند اجرای کد توسط مفسر پایتون و همچنین معرفی بایت‌کد توجه و در نهایت نیز به معرفی virtualenv و pyvenv پرداخته شده است.

 

ساختار پروژه

نخستین گام در توسعه‌ یک برنامه پایتون ایجاد یک پروژه است که پس از آن نوشتن کدها یا ایجاد سورس کد (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) برنامه آغاز می‌شود.

 

 

سورس کد یک پروژه به زبان پایتون در قالب یک یا چند «ماژول» (Module) توسعه می‌یابد که در سورس کدهایی با بیش از یک ماژول بهتر است ماژول‌هایی که از نظر منطقی با یکدیگر مرتبط هستند را درون دایرکتوری‌هایی مجزا قرار دهیم که به این نوع دایرکتوری‌ها در زبان پایتون «بسته» (Package) گفته می‌شود.

 

یک یا چند ماژول درون یک دایرکتوری مشخص تشکیل یک بسته را می‌دهند و هر بسته خود می‌تواند حاوی بسته‌(های) دیگری باشد.

 

 

از نسخه 3.3 پایتون با افزوده شدن ویژگی جدیدی به نام «بسته فضانام» (Namespace Package -

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)، تعریف بسته پایتون به دو شاخه «بسته عادی» (Regular Package) که همان تعریف قدیمی از بسته می‌باشد و بسته فضانام گسترش یافته است. [در درس مربوط به ماژول‌ها بیشتر توضیح داده خواهد شد]

 

در تعریف زبان پایتون دو نوع ماژول وجود دارد:

 

 

۱- Pure Module (ماژول ناب)، همان تعریف عادی از ماژول پایتون است؛ فایل‌هایی با پسوند py که کد (تعاریف و دستورات) پایتون در آن‌ها نوشته می‌شوند.

 

 

۲- Extension Module (ماژول توسعه)، ماژول‌هایی که توسط زبان‌های برنامه‌نویسی دیگری به غیر از پایتون ایجاد شده‌اند. از درس یکم به خاطر داریم که پایتون یک زبان توسعه‌پذیر است و در کنار آن می‌توان از کد‌های نوشته شده با دیگر زبان‌های برنامه‌نویسی استفاده نمود: به مانند C و ++C در پیاده‌سازی CPython یا Java در پیاده‌سازی Jython یا #C در پیاده‌سازی IronPython - [ایجاد و استفاده از این نوع ماژول در درسی جداگانه بررسی خواهد شد.]

 

از این پس هر جایی از کتاب که گفته شود «ماژول» منظور Pure Module خواهد بود، مگر اینکه نام «ماژول توسعه» به صراحت ذکر گردد.

 

 

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

 

SampleProject
.
├── sample_project.py
├── module_one.py
└── pakage/
   ├── __init__.py
   ├── module_two.py
   └── module_three.py

 

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

 

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

محتوای مخفی

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

 

[

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]: در نام‌گذاری ماژول‌ها تنها از حروف کوچک استفاده می‌شود و در صورت نیاز می‌توان از کاراکتر خط زیرین (_) نیز استفاده نمود. نام بسته‌ها کوتاه بوده و از حروف کوچک تشکیل می‌گردد؛ استفاده از _ در نام بسته پیشنهاد نمی‌شود.

 

اکنون اطلاعات کافی برای شروع یک پروژه از پایتون را دارید ولی چنانچه می‌خواهید با ساختار مناسب پروژه‌ای که قرار است برای استفاده افراد دیگر از طریق PyPI یا سرویس‌هایی نظیر github.com منتشر شود (مانند یک کتابخانه کاربردی) آشنا شوید، ادامه این بخش را نیز مطالعه نمایید. در غیر این صورت می‌توانید به بخش بعدی از همین درس پرش نمایید.

 

 

جدا از سورس کد لازم است موارد دیگری نیز در ساختار این نوع پروژه‌ها در نظر گرفته شود؛ به ساختار پایین توجه نمایید:

 

SampleProject
.
├── docs/
├── LICENSE.txt
├── MANIFEST.in
├── README.rst
├── requirements.txt
├── sampleproject/
│   ├── __init__.py
│   ├── module_one.py
│   ├── pakage/
│   │   ├── __init__.py
│   │   ├── module_two.py
│   │   └── module_three.py
│   ├── sample_project.py
│   └── test/
├── setup.cfg
└── setup.py

 

ساختار ابتدایی تنها شامل سورس کد می‌بود ولی در این ساختار تمام سورس کد در قالب یک بسته پایتون بخشی از مجموعه بزرگتری است که در آن یک سری فایل به مانند requirements.txt ،README.rst و setup.py به همراه دو دایرکتوری docs و test افزوده شده است. در ادامه کمی از کاربرد این موارد توضیح داده می‌شود ولی تاکید می‌شود که در حال حاضر نیازی به رعایت این ساختار نیست و در انتهای کتاب با ایجاد یک پروژه عملی و قرار دادن آن بر روی github.com و PyPI به صورت کاربردی با آن‌ها آشنا خواهید شد. [برای کسب اطلاعات بیشتر می‌توانید از

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
استفاده نمایید]

 

 

setup.py: این فایل مهم دو کارکرد دارد: ۱- پیکربندی پروژه که از طریق آرگومان‌های تابع آماده ()setup درون این فایل صورت می‌پذیرد. ۲- یک رابط خط فرمان برای اجرای دستورات کاربردی مرتبط با پروژه (الگویی مشابه:

 

 

فهرست این دستورات از طریق وارد کردن دستوری مشابه python setup.py --help-commands قابل مشاهده است.

setup.cfg: ساختاری شبیه به یک

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
داشته و در صورت نیاز گزینه‌های مربوط به دستورات خط فرمان setup.py در این فایل تعریف می‌گردند. برای مشاهده فهرست گزینه‌های یک دستور مشخص می‌توانید از الگوی

 

 

README.rst: تمام پروژه‌ها می‌بایست شامل سندی برای توصیف خود باشند. در پایتون برای ایجاد اسناد معمولا از زبان نشانه‌گذاری

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
استفاده می‌گردد و به همین دلیل این اسناد پسوند rst دارند که البته اجباری به این مورد نیست و می‌توانید برای ایجاد این فایل از

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(پسوند md) نیز استفاده نمایید.

 

 

MANIFEST.in: معمولا از این فایل برای معرفی فایل‌های غیر پایتونی موجود در پروژه استفاده می‌شود. زمانی که قصد ایجاد «سورس توزیع» یا sdist از پروژه را داشته باشید (دستوری مشابه: python setup.py sdist) تنها

محتوای مخفی

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) انجام گیرد.

 

 

requirements.txt: از این فایل برای معرفی کتابخانه‌های خاصی که در پروژه استفاده شده‌اند و در زمان نصب یا اجرای سورس کد، وجود یا نصب بودن آن‌ها نیز ضروری است، استفاده می‌گردد.

 

 

LICENSE.txt: این فایل پروانه‌ انتشار پروژه را شامل می‌شود و اغلب حاوی یک کپی از متن پروانه‌های متن باز رایج به مانند

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
،

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
یا

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
می‌باشد.

 

لازم است تمامی فایل‌های یاد شده و دایرکتوری docs در بالاترین شاخه از دایرکتوری پروژه قرار داده شوند.

 

 

docs: در این دایرکتوری اسناد (راهنما، آموزش و...) پروژه قرار داده می‌شوند. ایجاد این اسناد توسط

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
در درسی جداگانه بررسی خواهد شد.

 

 

test: این دایرکتوری محل نگهداری برنامه تست پروژه می‌باشد. ایجاد تست پروژه نیز در درسی جداگانه بررسی می‌گردد. این دایرکتوری می‌تواند هم در بالا ترین شاخه از پروژه و هم در داخل دایرکتوری سورس کد قرار داده شود.

 

 

با ایجاد یک توزیع (Distribution) از این ساختار و انتشار آن [که در آینده خواهید آموخت]، امکان نصب پروژه از طریق pip به وجود می‌آید. معمولا به جای واژه «توزیع» از واژه «بسته» (Package) استفاده می‌گردد؛ همانطور که pip نیز «سیستم مدیریت بسته پایتون» نامیده می‌شود و هیچگاه نباید آن را با مفهوم «بسته» که تا پیش از این مطرح شده است اشتباه گرفت.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ایجاد سورس کد

رای ایجاد فایل‌های سورس کد (ماژول‌ها و اسکریپت) نیاز به هیچ برنامه یا ابزار خاصی نیست و تنها با استفاده از یک ویرایشگر ساده متن (مانند برنامه Notepad در ویندوز) می‌توانید آن‌ها را ایجاد و ویرایش نمایید.

 

 

در ادامه پروژه‌ای به نام FirstProject که سورس کد آن تنها شامل یک اسکریپت است را ایجاد می‌نماییم. وظیفه این اسکریپت فرستادن حاصل عبارت 4÷(6×5-50) به خروجی (Output) خواهد بود.

 

 

برنامه‌ ویرایشگر متن پیش‌فرض سیستم عامل را اجرا نموده و به کمک آن یکی از کدهای پایین را (متناسب با نسخه پایتون مورد نظر خود) در فایلی با نام مشابه first_project و پسوند py نوشته و بر روی دیسک (در مسیر دایرکتوری Documents سیستم عامل) ذخیره می‌نماییم.

 

 

برای نسخه 2x، ساختار FirstProject و محتوای فایل first_project_2x.py را به صورت پایین در نظر می‌گیریم:

 

FirstProject
.
└── first_project_2x.py

 

#-*- coding: utf-8 -*-


# Python 2.x
# File Name: first_project_2x.py
# This script prints a value to the screen.


print "(50-5×6)÷4 =", (50-5*6)/4

 

و برای نسخه 3x، ساختار FirstProject و محتوای فایل first_project_3x.py را به صورت پایین در نظر می‌گیریم:

 

FirstProject
.
└── first_project_3x.py

 

# Python 3.x
# File Name: first_project_3x.py
# This script prints a value to the screen.


print("(50-5×6)÷4 =", (50-5*6)/4)

 

در بخش بعدی به اجرای سورس کد FirstProject خواهیم پرداخت؛ در این بخش بهتر است کمی به بررسی کدهای آن بپردازیم:

 

 

متن ماژول‌های پایتون 2x به صورت پیش‌فرض از استاندارد یونیکد (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) پشتیبانی نمی‌کنند و توسط اسکی (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) کدگذاری (Encoding) می‌شوند که تنها امکان استفاده از ۱۲۸ کاراکتر را می‌دهد. می‌توان با افزودن سطری مطابق الگوی -*- coding: encoding -*-# در ابتدای ماژول‌های پایتون (سطر یکم یا دوم) شیوه کدگذاری را به شکل دلخواه تعیین نماییم. [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]

 

 

بر همین اساس کدگذاری اسکریپت first_script_2x.py را به دلیل استفاده از کاراکترهایی خارج از مجموعه ASCII (÷ و ×) به UTF-8 تغییر داده‌ایم. پایتون 3x به صورت پیش‌فرض از استاندارد یونیکد پشتیبانی می‌کند.

 

 

در زبان پایتون هر متنی که بعد از کاراکتر ”Number sign“ یا # (در همان سطر) قرار بگیرد توسط مفسر پایتون نادیده گرفته می‌شود و تاثیری در روند ترجمه و اجرای کدها ندارد، به این نوع متن‌ «توضیح» (کامنت Comment) گفته می‌شود و از آن برای مستندسازی (Documentation) ماژول یعنی ارایه توضیح در مورد بخشی از کد استفاده می‌گردد. ارایه توضیح نقش زیادی در خوانایی ماژول دارد و کمک می‌کند تا افراد دیگر - حتی خودتان - بتوانند عملکرد کدهای ماژول (یا اسکریپت) شما را بفهمند.

 

کاراکتر نخست عبارت تعیین کدگذاری نیز # است ولی این سطر کامنت نبوده و درک آن برای مفسر با ارزش می‌باشد.

 

 

سطرهای خالی (Blank Lines) نیز توسط مفسر پایتون نادیده گرفته می‌شوند و تاثیری در روند ترجمه و اجرای کدها ندارند. استفاده درست از سطرهای خالی بر خوانایی کدهای ماژول می‌افزاید.

 

 

روش رایج فرستادن داده به خروجی (اینجا:‌ چاپ بر روی صفحه نمایش) در پایتون، استفاده از دستور print (در نسخه 2x) یا تابع ()print (در نسخه 3x) است. بارزترین تفاوت نسخه 3.0 پایتون با نسخه‌های پیش از خود،‌ تبدیل دستور print به تابع (Function) می‌باشد. برای تابع، داده درون پرانتز قرار داده می‌شود. [در درسی جداگانه به بررسی تابع‌ها در پایتون خواهیم پرداخت]

 

 

دستور (یا تابع) print توانایی دریافت هر تعداد داده و از هر نوع را دارد و در صورت دریافت یک عبارت محاسباتی (Arithmetic) یا منطقی (Logical) ابتدا حاصل آن را محاسبه یا ارزیابی کرده و پس از تبدیل به نوع داده string در خروجی قرار می‌دهد. در هنگام فرستادن چندین داده گوناگون به خروجی می‌بایست آن‌ها را توسط کاما (Comma) از یکدیگر جدا نماییم. در اینجا نیز print دو داده برای فرستادن به خروجی دریافت کرده است؛ یک نوع داده string و یک عبارت محاسباتی.

 

 

به دنباله‌ای از کاراکترها که بین دو نماد نقل قول (Quotation) یا " " محصور شده‌ باشند، string گفته می‌شود.

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

اجرای سورس کد

در حالت کلی به دو شیوه می‌توان به زبان پایتون کد نوشت و اجرا نمود: ۱- به حالت تعاملی (Interactive) با مفسر پایتون ۲- با ایجاد اسکریپت پایتون.

 

 

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

 

user> python
Python 2.7.9 (default, Jan 12 2015, 12:41:47)
[GCC 4.9.2 20141101 (Red Hat 4.9.2-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> a = 3
>>> b = 2
>>> a * b
6
>>>

 

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

 

 

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

 

 

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

 

user> python2 Documents/FirstProject/first_project_2x.py
(50-5×6)÷4 = 5

 

user> python3 Documents/FirstProject/first_project_3x.py
(50-5×6)÷4 = 5.0

 

اگر به حاصل عبارت 4÷(6×5-50) در خروجی دو اسکریپت دقت کرده باشید حتما متوجه تفاوت آن شده‌اید. پایتون 2x حاصل تقسیم دو عدد صحیح (Integer) را به صورت یک عدد صحیح محاسبه و از مقدار بعد از ممیز (در صورت وجود) صرف نظر می‌کند ولی پایتون 3x همواره حاصل تقسیم را به صورت یک عدد اعشاری (Floating Point) و با دقتی بیشتر بر می‌گرداند. باز هم در این مورد صحبت خواهیم کرد.

 

 

نتیجه اجرای دو اسکریپت یاد شده در هر سیستم عاملی همان است که در بالا مشاهده می‌نمایید. چنانچه کاربر سیستم عامل ویندوز هستید به این نکته توجه داشته باشید که به دلیل وجود کاراکترهای خاصی (÷ و ×) که قرار است توسط print بر روی خط فرمان نمایش داده شوند و همچنین عدم پشتیبانی پیش‌فرض خط فرمان ویندوز از کدگذاری UTF-8، به هنگام اجرای اسکریپت خطایی گزارش می‌شود که ارتباطی با کد پایتون ندارد. در این مواقع پیشنهاد می‌شود از پایتون 3x و برنامه PowerShell استفاده نموده و پیش از اجرای اسکریپت دستور chcp 65001 را وارد نمایید - به صورت پایین:

 

PS > chcp 65001
Active code page: 65001


PS > python Documents\FirstProject\first_script_3x.py
(50-5×6)÷4 = 5.0

 

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

 

 

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

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)، آن را به روش معمول در یونیکس اجرا نماییم:

 

#!/usr/bin/env python3

 

env یک دستور شل (Shell) یونیکس است که در زمان اجرای اسکریپت مفسر پایتون را می‌یابد و نشانی آن را جایگزین می‌کند. به جای استفاده از env می‌توان نشانی مفسر پایتون مورد نظر را به صورت صریح مانند usr/bin/python3/!# نوشت که البته در مواردی که پایتون به صورت جداگانه نصب شده باشد (نشانی مفسر در این حالت: usr/local/bin/python3/)، کارایی ندارد و موجب شکست در اجرا می‌گردد.

 

 

اکنون برای نمونه اگر اسکریپت first_script_2x.py را برای اجرا در گنولینوکس کامل‌تر سازیم:

 

#!/usr/bin/env python
#-*- coding: utf-8 -*-


# Python 2.x
# File: first_project_2x.py
# This script prints a value to the screen.


print "(50-5×6)÷4 =", (50-5*6)/4

 

پس از تغییر حالت، به دو صورت پایین می‌توان آن را در توزیع‌های گنولینوکس اجرا نمود:

 

user> chmod +x Documents/FirstProject/first_project_2x.py


user> Documents/FirstProject/first_project_2x.py
(50-5×6)÷4 = 5

 

user> cd Documents/FirstProject/


user> chmod +x first_project_2x.py


user> ./first_project_2x.py
(50-5×6)÷4 = 5

 

نباید نماد !# (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) را با نماد کامنت در پایتون (#) اشتباه گرفت.

 

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

محتوای مخفی

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

 

 

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
: یک IDE کامل، متن باز و رایگان است که برای پلتفرم

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
ارایه می‌شود.

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
: محصولی از شرکت فوق‌العاده JetBrains است که البته نسخه کامل آن فروشی است ولی نسخه کامیونیتی (Community) آن رایگان و متن باز می‌باشد که از بسیاری ویژگی‌ها و امکانات ویژه برخوردار است. (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
: یک IDE کامل، متن باز و رایگان است که طرفداران بسیاری دارد. NetBeans به صورت پیش‌فرض از پایتون پشتیبانی نمی‌کند و باید پلاگین مربوط به آن نصب گردد. (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
)

 

IDE یا Integrated development environment به ابزارهایی گفته می‌شود که علاوه‌بر یک ویرایشگر متن پیشرفته، امکانات بسیار کاربردی دیگری را نیز به مانند دیباگر (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) در اختیار برنامه‌نویس قرار می‌دهد.

 

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

پشت صحنه اجرا

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

wo15g99xfetesfhjzyv.png

 

بایت‌کد هر ماژول‌ پایتون در قالب فایلی با پسوند pyc که یاد‌آور py Compiled است، ذخیره می‌گردد. این فایل در یک زیردایرکتوری با نام __pycache__ داخل همان دایرکتوری ماژول ذخیره می‌شود و نام گذاری آن نیز با توجه به نام ماژول و نسخه‌ مفسر پایتون مورد استفاده، انجام می‌گیرد (نمونه: module.cpython-34.pyc). مفسر پایتون از این فایل ذخیره شده جهت افزایش سرعت اجرا در آینده بهره خواهد برد؛ به این صورت که در نوبت‌های بعدی اجرا چنانچه تغییری در کدهای ماژول یا نسخه‌ مفسر پایتون صورت نگرفته باشد، مفسر با بارگذاری فایل بایت‌کد از کامپایل مجدد سورس کد به بایت‌کد صرف نظر می‌کند.

 

مفسر پایتون تنها برای ماژول‌های وارد شده در اسکریپت اقدام به ذخیره کردن فایل بایت‌کد بر روی دیسک می‌کند و برای اسکریپت‌ این عمل صورت نمی‌گیرد.

 

 

بایت‌کد سورس کدهایی که تنها شامل یک اسکریپت هستند در حافظه‌ (Memory) نگهداری می‌شود.

 

 

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

 

در نسخه‌های پیش از 3.2، دایرکتوری __pycache__ ایجاد نمی‌گردد و فایل بایت‌کد با نامی برابر نام ماژول و در همان دایرکتوری قرار داده می‌شود (نمونه: module.pyc). در این شیوه قدیمی علاوه بر وجود بی‌نظمی در میان فایل‌ها، تمایز بین ترجمه‌ نسخه‌های متفاوت مفسر پایتون نیز ممکن نمی‌باشد.

 

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

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ایجاد محیط مجازی

حالتی را در نظر بگیرید که در ایجاد پروژه‌های مختلف به نسخه‌های متفاوتی از برخی کتابخانه‌ها نیاز دارید؛ در این صورت چگونه می‌توانید چندین نسخه‌ متفاوت از یک کتابخانه‌ را در پایتون نصب نمایید؟ برای نمونه، فرض نمایید می‌خواهیم بر روی توسعه دو وب‌سایت؛ یکی توسط نسخه جدید (1.8) وب فریم‌ورک جنگو (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) و دیگری بر روی یک نسخه قدیمی (0.96) از آن کار کنیم، ولی نمی‌توانیم!؛ زیرا که نمی‌شود هر دوی این نسخه‌ها را با هم در پایتون (دایرکتوری site-packages) نصب داشت. در این وضعیت راه حل ایجاد محیط‌هایی مجازی (Virtual Environments) برای توسعه پروژه‌های مورد نظر است؛ محیطی که توسعه و اجرای هر پروژه پایتون را به همراه تمام وابستگی‌های (Dependencies) آن از پروژه‌های دیگر جدا یا ایزوله (isolate) می‌کند. در ادامه به بررسی دو ابزار رایج در این رابطه می‌پردازیم.

 

virtualenv

در اینجا برای نصب

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
(ویرچوال اِنو) از pip استفاده می‌کنیم. پیش از شروع هر نصبی بهتر است pip را آپدیت نماییم؛ این مراحل را در سیستم عامل گنو لینوکس به صورت پایین دنبال می‌کنیم:

 

user> sudo pip install -U pip


[...]
Successfully installed pip[...]


user>

 

نصب virtualenv:

 

user> sudo pip install virtualenv


[...]
Successfully installed virtualenv[...]


user>

 

چنانچه بر روی سیستم عاملی هر دو نسخه 2x یا 3x نصب است؛ این موضوع که virtualenv را توسط pip کدام نسخه نصب نمایید، اهمیت چندانی ندارد. چرا که امکان استفاده از آن برای دیگر نسخه‌ها نیز وجود دارد.

 

اکنون برای ایجاد یک محیط مجازی از دستور virtualenv ENV استفاده می‌شود که منظور از ENV در آن، نشانی دایرکتوری دلخواهی است که قصد داریم محیط مجازی در آن ایجاد گردد:

 

user> virtualenv Documents/SampleENV/

 

دستور بالا موجب ایجاد یک محیط مجازی در مسیر /Documents/SampleENV سیستم عامل، بر پایه مفسر پایتونی که از pip آن برای نصب virtualenv استفاده کردیم می‌شود و چنانچه بخواهیم محیط مجازی خود را بر پایه‌ نسخه‌ موجود دیگری از پایتون ایجاد نماییم، لازم است با استفاده از گزینه python-- نشانی مفسر آن مشخص گردد [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

user> virtualenv --python=python2 ENV

 

user> virtualenv --python=python3 ENV

 

user> virtualenv --python=/opt/python3.3/bin/python ENV

 

در نمونه کد‌ بالا، نسخه‌های 2.7 و 3.4 پایتون از پیش بر روی سیستم عامل نصب بوده و نسخه 3.3 توسط کاربر در مسیر opt/python3.3/ نصب شده است.

 

 

مثالی دیگر برای کاربران ویندوز:

 

> virtualenv --python=C:\Python25\python.exe Documents\SampleENV\

 

اکنون می‌توانیم در پروژه خود به کتابخانه‌ها، pip، دایرکتوری site-packages و مفسری اختصاصی دسترسی داشته باشیم. البته پیش از شروع کار با یک محیط مجازی می‌بایست آن را activate (فعال) و پس از اتمام کار نیز آن را deactivate (غیر فعال) نماییم. فعال کردن در اینجا به معنای تنظیم متغیر Path سیستم عامل بر روی مفسر محیط مجازی مورد نظر است که با غیر فعال کردن، این وضعیت از بین می‌رود.

 

 

در گنولینوکس:

 

user> cd Documents/SampleENV/
user> source bin/activate
(SampleENV)$

 

 

(SampleENV)$ deactivate
user>

 

در ویندوز:

 

> cd Documents\SampleENV\
> Scripts\activate.bat
(SampleENV)>

 

(SampleENV)> deactivate.bat
>

 

pyvenv

در نسخه‌های 3x پایتون و از 3.3 به بعد ماژولی با نام venv برای ایجاد محیط مجازی به کتابخانه استاندارد پایتون افزوده شده است که می‌توان از آن به جای نصب virtualenv استفاده نمود؛ برای این منظور از دستور pyvenv (پای وی اِنو) و با الگویی مشابه pyvenv ENV استفاده می‌گردد.

 

 

در گنولینوکس:

 

user> pyvenv Documents/SampleENV/


user> cd Documents/SampleENV/
user> source bin/activate
(SampleENV)$

 

(SampleENV)$ deactivate
user>

 

در ویندوز:

 

[code]> C:\Python34\python C:\Python34\Tools\Scripts\pyvenv.py Documents\SampleENV\

 

[/code]یا

 

> C:\Python34\python -m venv Documents\SampleENV\

 

> cd Documents\SampleENV\
> Scripts\activate.bat
(SampleENV)>

 

(SampleENV)> deactivate.bat
>

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برنامه نویسی تعاملی

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

 

حالت تعاملی

از درس پیش به خاطر داریم که کدهای پایتون را می‌توان به دو روش اجرا نمود: ۱- ایجاد اسکریپت و معرفی آن به مفسر پایتون که در همان درس بررسی شد ۲- به شکل تعاملی با مفسر پایتون که موضوع همین درس است.

 

 

پایتون یک زبان برنامه‌نویسی با قابلیت «حالت تعاملی» (Interactive Mode) است؛ این قابلیت که مبتنی بر خط فرمان است، امکانی را برای پردازش و اجرای کدهای (دستورها، عبارت‌ها [1] و تعریف‌ها) زبان پایتون فراهم می‌آورد. کدنویسی در این حالت به مانند زمانی است که یک اسکریپت را ایجاد می‌نمایید؛ ولی با هر بار فشردن کلید Enter صفحه کلید، مفسر پایتون آن را به صورت خودکار اجرا می‌کند.

 

 

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

 

 

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

 

 

ورود به حالت تعاملی پایتون 2x - ویندوز:

 

> cd C:\\Python27
> python
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

 

ورود به حالت تعاملی پایتون 3x - گنولینوکس:

 

user> python3
Python 3.4.2 (default, Jan 25 2015, 20:02:16)
[GCC 4.9.2 20141101 (Red Hat 4.9.2-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

 

پس از ورود یک پیغام نمایش داده می‌شود؛ در این پیغام ضمن ارایه اطلاعات پایه در مورد مفسر پایتون و سیستم عامل، پیشنهاد می‌شود که جهت یافتن اطلاعات بیشتر در مورد زبان برنامه‌نویسی پایتون از دستورهای ویژه‌ایی استفاده نمایید:

 

 

 

  • ()license: باعث نمایش چندین صفحه مرتبط با تاریخ توسعه و پروانه‌های پایتون می‌گردد که البته از طریق - صفحه

    محتوای مخفی

      برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
    - نیز قابل مشاهده است. برای مرور از کلید Enter و خروج از کلید q صفحه کلید استفاده نمایید.
  • credits: فهرستی از سازمان‌ها و شرکت‌های مشارکت کننده در توسعه زبان پایتون را نمایش می‌دهد.
  • copyright: فهرست کپی‌رایت زبان پایتون از ابتدا تا کنون را نمایش می‌دهد.
  • help: این دستور کاربرد زیادی دارد که در ادامه بررسی می‌شود. با استفاده از این دستور می‌توان در مورد اشیا و اجزای مختلف موجود در زبان پایتون راهنمایی گرفت.

 

در حالت تعاملی پایتون، به صورت پیش‌فرض هر سطر توسط نماد

 

 

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

 

>>> print("(50-5×6)÷4 =", (50-5*6)/4)

(50-5×6)÷4 = 5.0

 

 

>>> def func():
...     print("(50-5×6)÷4 =", (50-5*6)/4)
...
>>> func()
(50-5×6)÷4 = 5.0

 

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

 

 

برای پایان دادن به دستورهای چند سطری می‌بایست سطر پایانی را خالی رها کرده و کلید Enter را بفشارید.

 

برای پاک کردن صفحه از کلید‌های ترکیبی Ctrl–L استفاده نمایید. به منظور خروج نیز می‌توانید عبارت ()quit را وارد کرده یا از کلیدهای ترکیبی Ctrl–D در گنولینوکس و Ctrl–Z با یک Enter پس از آن در ویندوز استفاده نمایید.

 

 

از مزایای حالت تعاملی این است که در بیشتر مواقع برای مشاهده نتیجه، نیازی به استفاده از print نمی‌باشد:

 

>>> a = 2
>>> a
2


>>> (50-5*6)/4
5.0

 

و چنانچه مشغول انجام محاسبات ریاضی هستید می‌توانید از یک متغیر خاص با نام _ (خط زیرین: Underscore) استفاده نمایید؛ این متغیر همواره به آخرین مقدار [2] محاسبه شده اشاره دارد:

 

>>> 5 * 6
30
>>> _
30
>>> 50 - _
20
>>> _ / 4
5.0

 

مثالی دیگر - در کاربرد ریاضی، برخی تابع‌ها توسط ماژول math از کتابخانه استاندارد پایتون در دسترس هستند [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

>>> import math


>>> math.sqrt(36)
6.0


>>> math.pow(3, 2)
9.0


>>> math.radians(90)
1.5707963267948966


>>> math.sin(_)
1.0

 

برای وارد کردن یک ماژول به اسکریپت (یا ماژولی دیگر) از دستور import استفاده می‌گردد. در یک درس جداگانه به صورت کامل صحبت خواهد شد ولی برای ادامه این درس تا همین حد بدانید که برای فراخوانی تابع‌های موجود در یک ماژول import شده از الگوی «نام ماژول + نقطه + نام تابع مورد نظر» استفاده می‌گردد - در دستور import پسوند ماژول نوشته نمی‌شود.

 

 

مثالی دیگر - sys یکی از ماژول‌های مهم پایتون است؛ این ماژول امکان دسترسی به برخی از متغیرهای مورد استفاده مفسر (در زمان اجرا) و همچنین تابع‌هایی که با مفسر در ارتباط هستند را فراهم می‌آورد [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

>>> import sys


>>> sys.version
'3.4.2 (default, Jan 25 2015, 20:02:16) \n[GCC 4.9.2 20141101 (Red Hat 4.9.2-1)]'


>>> sys.version_info
sys.version_info(major=3, minor=4, micro=2, releaselevel='final', serial=0)


>>> sys.platform
'linux'


>>> sys.getdefaultencoding()
'utf-8'

 

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

 

>>> import sys


>>> sys.exit("Error: Goodbye! :| ")
Error: Goodbye! :|


user>

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

دریافت راهنمایی

یکی از دستورهای پیشنهادی در پیغام ابتدایی حالت تعاملی، help بود که با وارد کردن آن متن پایین نمایش داده می‌شود:

 

>>> help
Type help() for interactive help, or help(object) for help about object.

 

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

 

در هر دو روش برای مرور توضیحات طولانی از کلیدهای Enter (سطر به سطر) و Space (صفحه به صفحه) بهره بگیرید و برای خروج از توضیحات نیز از کلید q صفحه کلید استفاده نمایید؛ انتهای توضیحات نیز توسط عبارت (END) مشخص می‌شود.

 

 

روش یکم: رفتن به حالت راهنمای تعاملی

برای این منظور از دستور ()help استفاده می‌گردد - با وارد کردن این دستور ضمن نمایش پیغام خوش‌آمد گویی، نماد سطر (

 

>>> help()


Welcome to Python 3.4's help utility!


If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3/tutorial/.


Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To quit this help utility and
return to the interpreter, just type "quit".


To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics".  Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".


help>

 

اکنون کافی است نام موردی که می‌خواهید درباره آن اطلاعات بگیرید را وارد نمایید؛ در همین راستا همانطور که در پیغام ابتدایی هم بیان شده است می‌توانید از فرمان‌‌های پایین نیز کمک بگیرید:

 

 

modules: نمایش فهرستی از نام تمامی ماژول‌های در دسترس

keywords:‌ نمایش تمام کلمه‌های کلیدی پایتون

symbols:‌ نمایش تمام نماد‌های معنادار در پایتون

topics: نمایش فهرستی از مباحث مربوط به پایتون

 

# Python 3.x


help> keywords


Here is a list of the Python keywords.  Enter any keyword to get more help.


False               def                 if                  raise
None                del                 import              return
True                elif                in                  try
and                 else                is                  while
as                  except              lambda              with
assert              finally             nonlocal            yield
break               for                 not
class               from                or
continue            global              pass


help> def


Function definitions
********************


A function definition defines a user-defined function object (see
section *The standard type hierarchy*):


[...]


A function definition is an executable statement.  Its execution binds
the function name in the current local namespace to a function object
(a wrapper around the executable code for the function).  This
function object contains a reference to the current global namespace
:

 

برای خروج از راهنمای تعاملی، quit (یا q) را وارد نماید.

 

 

روش دوم: فراخوانی تابع راهنما

در این روش از الگوی (help(object برای دریافت اطلاعات درباره یک شی (object)، به صورت مستقیم و بدون ورود به راهنمای تعاملی استفاده می‌شود - تنها کافی است نام شی مورد نظر را درون پرانتز قرار دهید (به جای واژه object):

 

>>> help(print)


Help on built-in function print in module builtins:


print(...)
   print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)


   Prints the values to a stream, or to sys.stdout by default.
   Optional keyword arguments:
   file:  a file-like object (stream); defaults to the current sys.stdout.
   sep:   string inserted between values, default a space.
   end:   string appended after the last value, default a newline.
   flush: whether to forcibly flush the stream.
(END)


>>>

 

print در نسخه 3x پایتون به صورت یک تابع تعریف شده است و تابع‌ها در پایتون یک نوع شی هستند.

 

از این روش با الگوی دیگری هم استفاده می‌شود. الگوی ("help("string یعنی قرار دادن نام موردی که می‌خواهید درباره آن اطلاعات بگیرید درون پرانتز به شکلی محصور با دو نماد نقل قول ( ” ” ) - این الگو عملکردی مشابه با روش قبل (روش یکم) دارد با این تفاوت که دریافت اطلاعات به صورت مستقیم و بدون ورود به راهنمای تعاملی انجام می‌پذیرد. در واقع برای به دست آوردن اطلاعات درباره موردی که شی نمی‌باشد (مانند هر یک از دستورهای symbols ،keywords ،modules و topics یا دستور print در پایتون 2x یا نام ماژول‌ها یا...) لازم است به این صورت اقدام گردد:

 

# Python 2.x


>>> help("keywords")


Here is a list of the Python keywords.  Enter any keyword to get more help.


and                 elif                if                  print
as                  else                import              raise
assert              except              in                  return
break               exec                is                  try
class               finally             lambda              while
continue            for                 not                 with
def                 from                or                  yield
del                 global              pass


>>> help("print")


The "print" statement
*********************


print_stmt ::= "print" ([expression ("," expression)* [","]]
               | ">>" expression [("," expression)+ [","]])


"print" evaluates each expression in turn and writes the resulting
object to standard output (see below).  If an object is not a string,
it is first converted to a string using the rules for string
conversions.  The (resulting or original) string is then written.  A
space is written before each object is (converted and) written, unless
the output system believes it is positioned at the beginning of a
line.  This is the case (1) when no characters have yet been written
to standard output, (2) when the last character written to standard
output is a whitespace character except "' '", or (3) when the last
write operation on standard output was not a "print" statement. (In
some cases it may be functional to write an empty string to standard
output for this reason.)


Note: Objects which act like file objects but which are not the
   built-in file objects often do not properly emulate this aspect of
   the file object's behavior, so it is best not to rely on this.


:

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

گزینه های فراخوانی

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

 

 

در پایتون 2x [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

python [-BdEiOQsRStuUvVWxX3?] [-c command | -m module-name | script | - ] [args]

در پایتون 3x [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]

همانطور که مشاهده می‌شود این دستور می‌تواند سه دسته آرگومان را بپذیرد:

 

 

دسته یکم (Options):

شامل برخی از حروف الفباست که به همراه یک کاراکتر خطِ فاصله (Dash) - بعد از دستور اصلی یعنی python می‌آیند؛ برخی از این گزینه‌ها به شرح زیر است:

 

 

q− (تنها در پایتون 3x) - در هنگام ورود به حالت تعاملی پایتون از نمایش پیغام ابتدایی صرف نظر می‌شود:

 

 

user> python3 -q
>>> 2 + 2
4

 

Q- (تنها در پایتون 2x) - در هنگام اجرای یک اسکریپت و برای کنترل عملگرهای تقسیم / موجود در آن به کار می‌رود؛ به این صورت که پس از آن می‌بایست یکی از کلمه‌های warn ،new ،old و warnall ذکر گردد.

 

 

 

  • Qold: حاصل تقسیم دو عدد صحیح یک عدد صحیح باشد.
  • Qnew: حاصل تقسیم دو عدد صحیح یک عدد ممیز شناور باشد - مانند نسخه 3x پایتون.
  • Qwarn: حاصل تقسیم دو عدد صحیح یک عدد صحیح باشد، به همراه نمایش پیام هشدار به ازای هر عملگر.
  • Qwarnall: به مانند Qwarn است ولی به ازای تمام عملگرهای تقسیم به کار رفته در اسکریپت تنها یک پیام هشدار نمایش داده می‌شود.

 

python -Qnew script.py

 

O- یا OO- - راه‌اندازی بهینه‌ساز (Optimization) پایه بایت‌کد، که می‌تواند تا حدودی موجب بهبود کارایی اسکریپت گردد. استفاده از گزینه OO- علاوه بر بهینه سازی، موجب دور انداختن مستندات [3] (Docstrings) موجود در اسکریپت نیز می‌شود:

 

python -O script.py

 

در صورت استفاده از این گزینه‌ها، به جای فایل pyc. (بایت‌کد معمولی)، فایلی با پسوند pyo. (بایت‌کد بهینه شده) ایجاد می‌گردد.

 

B- - مفسر پایتون از ذخیره بایت‌کد ماژول‌های import شده بر روی دیسک خودداری می‌کند:

 

 

python -B script.py

 

 

d- - برخی از گزارش‌های اضافه خطایابی (در صورت وجود) نمایش داده می‌شوند:

 

 

python -d script.py


i- - پس از اجرای اسکریپت، خط فرمان به حالت تعاملی پایتون وارد می‌شود:

 

 

python -i script.py


V- (برابر با version--) - نسخه پایتون نمایش داده می‌شود:

 

 

python -V

 

?- یا h- (برابر با help--) - فهرست گزینه‌های فراخوانی پایتون به همراه توضیحاتی کوتاه نمایش داده می‌شود:

 

 

python -h


S- - از import شدن ماژول site جلوگیری می‌شود:

 

 

python -S

 

به صورت عادی ماژول site در زمان راه‌اندازی مفسر پایتون به صورت خودکار import می‌گردد و وظیفه آن گسترش sys.path است. به عنوان نمونه؛ این ماژول مسیر دایرکتوری site-packages را به sys.path اضافه می‌کند.

 

 

دایرکتوری site-packages محل نگهداری بسته‌ها یا کتابخانه‌های شخص ثالثی است که با استفاده از pip اقدام به نصب آن‌ها در پایتون کرده‌ایم.

 

 

هر زمان که ماژولی import می‌شود مفسر پایتون در داخل دایرکتوری‌های مشخصی به دنبال آن می‌گردد؛ این دایرکتوری‌ها در sys.path فهرست شده‌اند.

 

 

برای نمونه - پایتون 3x در ویندوز:

 

> python -q


>>> import sys
>>> sys.path
['', 'C:\\Python34', 'C:\\Windows\\SYSTEM32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34\\lib\\site-packages']
>>>

 

برای نمونه - پایتون 3x در گنولینوکس:

 

user> python3 -qS


>>> import sys
>>> sys.path
['', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4/', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload']
>>>

 

از گزینه S استفاده شده است و همانطور که مشاهده می‌نمایید دیگر از دایرکتوری site-packages خبری نیست!

 

نخستین دایرکتوری که مفسر در آن به دنبال نام ماژول می‌گردد؛ دایرکتوری حاوی اسکریپت است که در کدهای بالا (چون که مربوط به حالت تعاملی پایتون است) توسط '' مشخص شده است.

 

 

مفسر دایرکتوری‌های این فهرست را به ترتیب (از چپ به راست) برای جستجو در نظر می‌گیرد.

 

 

می‌توانید با نوشتن مسیر دایرکتوری‌های دلخواه خود درون یک فایل متنی با پسوند pth. و قرار دادن آن درون دایرکتوری site-packages، این دایرکتوری‌ها را نیز به sys.path بیافزایید. برای نمونه فایل mypath.pth را (در سیستم عامل گنولینوکس) ایجاد می‌نماییم:

 

user> cd /usr/local/lib/python3.4/site-packages
user> sudo touch mypath.pth
user> sudo chmod 777 mypath.pth

 

فایل mypath.pth را با یک ویرایشگر متن باز کرده و مشابه پایین فهرست دایرکتوری‌های مورد نظر خود را در آن وارد می‌نماییم:

 

 

/home/saeid/Documents
/home/saeid/Documents/me

اکنون تمام ماژول‌های موجود در این دایرکتوری‌ها قابل import هستند؛ به فهرست sys.path توجه نمایید:

 

user> python3 -q


>>> import sys
>>> sys.path
['', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages', '/home/saeid/Documents', '/home/saeid/Documents/me']
>>>

 

همین کار را می‌توان از طریق برنامه‌نویسی نیز انجام داد، البته پس از اتمام اجرای اسکریپت (در اینجا: خروج از حالت تعاملی) اثر آن از بین می‌رود:

 

user> python3 -q


>>> import sys
>>> sys.path.append('/home/saeid/Documents')
>>> sys.path.append('/home/saeid/Documents/me')

 

تابع append دایرکتوری مورد نظر را به انتهای فهرست sys.path اضافه می‌کند. البته می‌توان با استفاده از تابع insert به جای append جایگاه دایرکتوری دلخواه خود را با استفاده از آرگومان نخست آن در sys.path مشخص نمود؛ با این کار دایرکتوری مورد نظر زودتر از دایرکتوری‌های بعد خودش توسط مفسر مورد جستجو قرار می‌گیرد - فایده این کار زمانی مشخص می‌شود که در دایرکتوری‌هایی مجزا، ماژولی با نام یکسان وجود داشته باشد؛ در این صورت ماژولی که زودتر توسط مفسر دیده شود به عنوان ماژول مورد نظر import می‌شود:

 

user> python3 -q


>>> import sys
>>> sys.path.insert(1,'/home/saeid/Documents/me')
>>> sys.path
['', '/home/saeid/Documents/me', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages']
>>>

 

چند درس جلوتر خواهید آموخت که مقدار sys.path در واقع یک شی از نوع list است؛ append و insert نیز تابع‌هایی هستند که توسط یک شی از نوع list می‌توانند فراخوانی گردند. در این مرحله تنها به یاد داشته باشید که موقعیت‌ها در یک شی از نوع list از عدد صفر شماره‌گذاری می‌گردند.

 

دسته دوم:

c command- - این الگو امکان اجرای دستورهای پایتون را بدون ورود به حالت تعاملی یا ایجاد اسکریپت، فراهم می‌سازد:

 

user> python3 -c "import sys; print(sys.path)"
['', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages']

 

دستورها باید درون نمادهای نقل قول محصور باشند.

 

 

استفاده از سمی‌کالن ( ; )‌ در پایان دستورهای پایتون اجباری نیست ولی چنانچه بخواهیم چند دستور را در یک سطر قرار بدهیم می‌بایست از آن استفاده نماییم.

 

 

m module-name- - این الگو امکان اجرای یک ماژول (از میان فهرست sys.path) را به عنوان ماژول __main__ فراهم می‌سازد.

 

 

جالب‌ترین نمونه برای بیان کاربرد این الگو، اجرای ماژول SimpleHTTPServer است. زمانی که نیاز به راه‌اندازی سریع یک وب سرور را دارید و نمی‌خواهید خود را درگیر نصب و پیکربندی Apache یا دیگر وب سرور‌ها نمایید؛ می‌توانید از این ماژول پایتون بهره بگیرید. این ماژول امکانات یک وب سرور ساده را در اختیار شما قرار می‌دهد. البته این ماژول در نسخه 3x پایتون در ماژول http.server ادغام شده است.

 

در پایتون 2x [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

 

user> python -m SimpleHTTPServer 8080


در پایتون 3x [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]:

 

 

user> python3 -m http.server 8080

 

در استفاده از این الگو نیز همانند زمان import، پسوند ماژول (py) نوشته نمی‌شود.

 

 

می‌توان شماره پورت را وارد نکرد که در این حالت به صورت پیش‌فرض پورت 8000 در نظر گرفته می‌شود.

 

 

ولی منظور از ماژول __main__ چیست؟

 

 

هنگامی که ماژولی (برای نخستین بار) import می‌شود، مفسر پایتون به صورت خودکار تمام کد‌های درون آن را اجرا می‌کند. در مواردی ممکن است یک فایل py. حاوی کدهایی باشد که تنها می‌بایست در حالت اسکریپت به اجرا درآید؛ در این شرایط با import شدن فایل، این کد‌ها نیز اجرا می‌گردند که خواست برنامه‌نویس نمی‌باشد!. از طرفی در پایتون یک سری مقادیر و متغیرهای ویژه و از پیش تعریف شده به مانند __name__ وجود دارد. متغیر __name__ به نام ماژول اشاره دارد؛ در حالت اسکریپت (اجرای یک ماژول به صورت مستقیم - نمونه دستور: python script.py - درس پیش توضیح داده شد) مقدار __name__ برابر با یک مقدار ویژه به نام __main__ می‌گردد که از این موضوع می‌توان برای کنترل اجرای کدها استفاده کرد.

 

 

معمولا کدهای اسکریپت به گونه‌ای نوشته می‌شوند که اجرای آن‌ها وابسته به اجرای یک تابع اصلی باشد که معمولا ()main نامیده می‌شود که در انتها بتوان با قرار دادن شرط برابری مقدار __name__ با __main__ برای اجرای تابع یاد شده، از اجرای کد‌های مورد نظر تنها در حالت اجرا به صورت اسکریپت (و نه در زمان import) مطمئن شد.

 

def main():
   print("this runs only when executed directly")


if __name__ == '__main__':
   main()

 

script - این الگو (python script.py) بیان‌‌گر همان روش اجرای اسکریپت است که در درس پیش به صورت کامل راجب آن صحبت شد.

 

 

دسته سوم (Arguments):

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

 

# file: Documents/script-argv-3x.py
# Python 3.x


import sys


print(sys.argv)
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])

 

اسکریپت بالا را با ارسال دو آرگومان arg_1 و arg_2 اجرا می‌نماییم:

 

user> python3 Documents/script-argv-3x.py arg_1 arg_2


['/home/saeid/Documents/script-argv-3x.py', 'arg_1', 'arg_2']
/home/saeid/Documents/script-argv-3x.py
arg_1
arg_2

 

مقدار sys.argv نیز یک شی از نوع list است: [... ,Ο, Ο, Ο] - برای دسترسی به عناصر موجود در شی list، از الگویی مشابه [object[index که در آن ...,index=0,1,2,3 است، استفاده می‌گردد؛ به عنوان نمونه [sys.argv[0 به نخستین عنصر موجود در sys.argv اشاره دارد.

 

 

عضو نخست sys.argv یا [sys.argv[0 همواره حاوی نام اسکریپت است. البته به جز در مواقعی که از c- استفاده کرده‌ایم که در این صورت برابر مقدار 'c-' خواهد بود:

 

user> python3 -c "import sys; print(sys.argv)" 2
['-c', '2']

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

مفهوم شی گرایی

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

 

برنامه نویسی شی گرا

«برنامه‌نویسی شی‌گرا» (

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
) یا به اختصار OOP یک الگو یا شیوه تفکر در برنامه‌نویسی است که برگرفته از دنیای واقعی بوده و از دهه ۱۹۶۰ میلادی مطرح گشته است. به زبانی که از این الگو پشتیبانی کند، «زبان شی‌گرا» گفته می‌شود؛

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
و

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
نخستین زبان‌های برنامه‌نویسی شی‌گرا هستند. ایده شی‌گرایی در پاسخ به برخی از نیازها که الگوهای موجود پاسخ‌گو آن‌ها نبودند به وجود آمد؛ نیازهایی مانند: توانایی حل تمامی مسائل پیچیده (Complex)، «پنهان‌سازی داده» (Data Hiding)، «قابلیت استفاده مجدد» (Reusability) بیشتر، وابستگی کمتر به توابع، انعطاف بالا و...

 

رویکرد برنامه‌نویسی شی‌گرا «از پایین به بالا» (Bottom-Up) است؛ یعنی ابتدا واحدهایی کوچک از برنامه ایجاد می‌شوند و سپس با پیوند این واحدها، واحدهایی بزرگتر و در نهایت شکلی کامل از برنامه به وجود می‌آید. برنامه‌نویسی شی‌گرا در قالب دو مفهوم «کلاس» (Class) و «شی» (Object) ارایه می‌گردد. هر کلاس واحدی از برنامه است که تعدادی داده و عملیات‌ را در خود نگه‌داری می‌کند و هر شی نیز حالتی (State) مشخص از یک کلاس می‌باشد.

 

در برنامه‌نویسی شی‌گرا، هر برنامه در قالب موجودیت‌های کوچکی که در واقع همان اشیا هستند و با یکدیگر تعامل دارند در نظر گرفته می‌شود. برای داشتن این اشیا می‌بایست ابتدا کلاس‌های برنامه را تعریف نماییم؛ هر کلاس «رفتار» (Behavior) و «صفات» (Attributes) اشیایی که قرار است از آن ایجاد شوند را تعریف می‌کند. از یک کلاس می‌توان هر تعداد که بخواهیم شی ایجاد نماییم. هر شی بیانگر یک «حالت» یا یک «نمونه» (Instance) از کلاس خود است.

 

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

 

به هر شی کلاس، یک نمونه از آن کلاس گفته می‌شود و هر زمان که یک شی از کلاسی ایجاد می‌گردد در واقع یک نمونه از آن ساخته می‌شود. به این عمل در شی‌گرایی «نمونه‌سازی» (Instantiation) گفته می‌شود. بر همین اساس دو نوع کلاس در شی‌گرایی وجود دارد: ۱- کلاس‌های عادی که توانایی نمونه‌سازی دارند و به آن‌ها ”Concrete Class“ گفته می‌شود ۲- کلاس‌هایی که توانایی نمونه‌سازی ندارند و به آن‌ها ”Abstract Class“ گفته می‌شود.

 

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

 

گفتیم هر کلاس از تعدادی داده و عملیات درون خود نگهداری می‌کند و همچنین گفتیم هر کلاس رفتار و صفات اشیایی که قرار است از آن ایجاد شوند را تعریف می‌کند؛ اکنون با ارایه تعریفی کامل‌تر خواهیم گفت که: هر کلاس از دو بخش «اعضای داده» (Data Members) و «توابع عضو» (Member Functions) تشکیل شده است. اعضای داده در واقع همان متغیر‌های درون کلاس هستند که خصوصیات یا صفات شی را بیان می‌کنند و در شی‌گرایی با عنوان «فیلد» (Field) یا «صفت» (Attribute) از آن‌ها یاد می‌شود. توابع عضو نیز عملیات یا کارهایی هستند که یک شی از کلاس قادر به انجام آن‌ها می‌باشد؛ می‌توان توابع عضو را بیانگر رفتار اشیا کلاس دانست. در شی‌گرایی به این توابع «متد» (Method) گفته می‌شود.

 

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

 

car_object.color
car_object.drive()

 

همانطور که در زمان پیاده‌سازی کلاس خواهید دید؛ با ایجاد هر نمونه از کلاس یک متد خاص در آن به صورت خودکار اجرا می‌گردد. این متد «سازنده» (Constructor) نام دارد و کار آن «مقداردهی اولیه» (Initialization) شی است. این کار موجب اطمینان از مقداردهی تمامی اعضای داده پیش از استفاده شی در برنامه می‌گردد.

 

برای مثال به کلاس خودرو برگردیم و برای آن صفات: رنگ بدنه، ظرفیت باک، بیشینه سرعت و متدهای: راندن، دریافت میزان سوخت، سوخت گیری، تنظیم سرعت، توقف را در نظر بگیریم. اکنون می‌توانیم با تنظیم صفات، نمونه‌ها یا اشیای مورد نظر خود را از این کلاس ایجاد نماییم. برای مثال: دو خودروی آبی با ظرفیت باک ۲۰ لیتر و بیشینه سرعت ۸۰ کیلومتر-ساعت یا یک خودروی صورتی با ظرفیت باک ۴۰ لیتر و بیشینه سرعت ۱۶۰ کیلومتر-ساعت که البته هر سه آن‌ها تمام متدهای کلاس را در خود دارند:

2wha689r9dobdivxlteh.jpg

 

n89z4jdlclg63hy6mnyg.jpg

 

تا به اینجا با مفاهیم «کلاس»، «صفت»، «متد»، «شی»، «نمونه‌سازی» و «کپسوله‌سازی» آشنا شده‌ایم؛ در ادامه به توضیح سه مفهوم مهم دیگر از برنامه‌نویسی شی‌گرا که عبارتند از: «وراثت» (Inheritance)، «چندریختی» (Polymorphism) و «انتزاع» یا «تجرید» (Abstraction) خواهیم پرداخت.

 

وراثت:

وراثت یکی از شکل‌های «قابلیت استفاده مجدد» کد بوده که برنامه‌نویس را قادر می‌سازد تا با ارث‌بری صفات و متدهای یک یا چند کلاس موجود، کلاس‌های جدیدی را ایجاد نماید.

 

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

 

به کلاسی که از آن ارث‌بری می‌شود ”Parent Class“ یا ”Base Class“ (کلاس پایه) یا ”Superclass“ و به کلاسی که اقدام به ارث‌بری می‌کند ”Child Class“ (کلاس فرزند) یا ”Derived Class“ یا ”Subclass“ گفته می‌شود.

 

ارث‌بری توسط «نسبت هست-یک» (IS-A Relationship) بیان می‌شود؛ این نسبت می‌گوید کلاس فرزند یک نوع از چیزی است که کلاس پایه هست. کلاس A از کلاس B ارث‌بری دارد؛ در این حالت می‌گوییم: A is a type of B، یعنی درست است اگر بگوییم: «سیب» یک نوع «میوه» است یا «خودرو» یک نوع «وسیله نقلیه» است ولی توجه داشته باشید که این یک ارتباط یک‌طرفه از کلاس فرزند به کلاس پایه است و نمی‌توانیم بگوییم: «میوه» یک نوع «سیب» است یا «وسیله نقلیه» یک نوع «خودرو» است.

 

کلاس‌ها می‌توانند مستقل باشند ولی هنگامی که وارد رابطه‌های وراثت می‌شوند، یک ساختار سلسله مراتب (Hierarchy) به شکل درخت را تشکیل می‌دهند. برای نمونه به ساختار سلسله مراتب وراثت پایین که مربوط به برخی اشکال هندسی است توجه نمایید، پیکان‌ها نشانگر نسبت is-a هستند.

 

ua0qqqpnp7yoawqtlt0w.png

 

در برنامه‌نویسی شی‌گرا نسبت دیگری نیز با عنوان «نسبت دارد-یک» (HAS-A Relationship) وجود دارد که بیانگر مفهومی به نام «ترکیب» (Composition) است که شکل دیگری از قابلیت استفاده مجدد کد می‌باشد ولی مفهومی متفاوت با وراثت دارد. این نسبت زمانی بیان می‌شود که درون یک کلاس (مانند: C) از کلاس دیگری (مانند: D) نمونه‌سازی شده باشد؛ یعنی شی کلاس C درون خودش شی‌ای از کلاس D را داشته باشد؛ در این حالت می‌گوییم: C has a D. به یاد دارید خواندیم کلاس خودرو از کلاس‌های کوچکتری ساخته شده است؛ مثلا کلاس موتور - یعنی درون این کلاس یک شی از کلاس موتور ایجاد شده است، اکنون می‌توانیم بگوییم: «خودرو» یک «موتور» دارد.

boayvqw76bf0bj4agmrr.png

 

چندریختی:

مفهوم چندریختی بیانگر توانایی کلاس فرزند در تعریف متدهایی است که در کلاس پایه موجود می‌باشند. برای نمونه دو کلاس «ماهی» و «گربه» را که هر دو آن‌ها از کلاسی به نام «حیوانات» ارث‌بری دارند را در نظر بگیرید؛ در کلاس حیوانات متدی با عنوان «غذا خوردن» که عملی مشترک در میان تمام حیوانات است وجود دارد ولی از آنجا که چگونگی انجام آن در ماهی و گربه متفاوت است، بنابراین هر دو این کلاس‌ها نیاز دارند تا متد «غذا خوردن» مخصوص خود را داشته باشند - در این جاست که این متد در کلاس‌های فرزند بازتعریف می‌شود، به این عمل ”Method Overriding“ گفته می‌شود. با Override کردن یک متد، متد کلاس پایه زیر سایه متد مشابه در کلاس فرزند قرار می‌گیرد و از نظر اشیا کلاس فرزند پنهان می‌شود.

 

تجرید:

تجرید در برنامه‌نویسی شی‌گرا به همراه مفهوم چندریختی می‌آید و توسط دو مفهوم «کلاس‌های مجرد» (Abstract Classes) و «متدهای مجرد» (Abstract Methods) ارایه می‌گردد.

 

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

 

به عنوان نمونه سه کلاس «ماهی»، «گربه» و «کبوتر» را در نظر بگیرید. این کلاس‌ها جدا از رفتارهای خاص خود (مانند: «پرواز کردن» در کبوتر یا «شنا کردن» در ماهی)، در یک سری رفتار به مانند «نفس کشیدن»، «غذا خوردن» و... مشترک هستند. راه درستِ توسعه این کلاس‌ها تعیین یک «کلاس پایه» برای رفتارهای مشترک و ارث‌بری هر سه آن‌ها می‌باشد. ولی از آنجا که هر یک، این رفتارهای مشترک را به گونه‌ای دیگر انجام می‌دهد؛ راه درست‌تر آن است که یک «کلاس مجرد» به عنوان «کلاس پایه» آن‌ها در نظر بگیریم؛ در این حالت هر کدام از کلاس‌ها ضمن دانستن رفتارهای لازم می‌تواند آن‌‌ها را متناسب با خواست خود تعریف نماید.

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

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

علاوه‌بر اینکه پایتون یک زبان برنامه‌نویسی شی‌گراست، ساختار آن نیز بر مبنای شی‌گرایی توسعه یافته است و اینطور بیان می‌شود که هر چیزی در پایتون یک شی است. اشیا، انتزاعِ پایتون برای ارایه «انواع داده‌» (Data Types) هستند. به بیان دیگر تمام داده‌های یک برنامه پایتونی یا به صورت مستقیم یک شی است یا از روابط بین اشیا ایجاد می‌گردد. برای نمونه: 56، "!Hello World"، توابع و... حتی خود کلاس‌ها نیز توسط یک نوع شی ارایه می‌شوند.

 

هر شی در پایتون حاوی یک «شناسه» (identity)، یک «نوع» (type) و یک «مقدار» (value) است.

 

«شناسه» در زمان ایجاد شی به آن اختصاص می‌یابد و غیر قابل تغییر است. تابع ()id شناسه شی را به صورت یک عدد صحیح برمی‌گرداند که این مقدار در CPython بیانگر نشانی (Address) شی در حافظه (Memory) است:

 

>>> id(5)
140468674877440

>>> num = 0.25
>>> id(num)
140468676592120

>>> msg = "Hello World!"
>>> id(msg)
140468675425264

 

هر شی در پایتون دارای یک «نوع» یا ”type“ است که عملیات قابل پشتیبانی و نیز مقادیر ممکن برای شی را تعریف می‌کند. نوع هر شی توسط تابع ()type قابل مشاهده است و همانند شناسه غیر قابل تغییر می‌باشد:

 

>>> # python 3.x
>>> type(127)
<class 'int'>

>>> # python 2.x
>>> type(127)
<type 'int'>

 

تمام اعداد صحیح (Integers) در پایتون یک شی از نوع int می‌باشند.

 

«مقدار» برخی اشیا در پایتون قابل تغییر است که به این دسته از اشیا ”mutable“ (تغییر پذیر) گفته می‌شود؛ ولی مقدار برخی دیگر قابل تغییر نمی‌باشد (مانند اعداد: شی 127) که به آن‌ها اشیا ”immutable“ (تغییر ناپذیر) می‌گویند.

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کلاس ها در پایتون

از نسخه 2.2 طراحی کلاس‌ها در پایتون تغییر کرد [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
] که البته ساختار قدیمی همچنان در نسخه 2x باقی مانده است.

 

در ساختار جدید مفهوم ”type“ برابر مفهوم ”class“ طراحی شده است. در این ساختار هر کلاس خود یک شی از کلاسی به نام ”type“ می‌باشد و همچنین تمامی کلاس‌ها از کلاسی به نام ”object“ ارث‌بری دارند:

 

>>> # Python 3.x
>>> num = 3

>>> num.__class__
<class 'int'>

>>> type(num)
<class 'int'>

>>> type(type(num))
<class 'type'>

>>> type(num).__class__
<class 'type'>

>>> type(num).__bases__
(<class 'object'>,)

 

صفت __class__ نام کلاس یک شی و صفت __bases__ نام کلاس‌های پایه یک کلاس را نمایش می‌دهد.

تعریف کلاس

در پایتون برای تعریف کلاس از کلمه کلیدی class استفاده می‌گردد؛ همانند الگو پایین:

 

class ClassName:
   <statement-1>
   .
   .
   .
   <statement-N>

 

کلمه کلیدی تعریف کلاس - class - یک دستور اجراپذیر (Executable Statement) است. یک کلاس پیش از اجرای دستور خود هیچ تاثیری در برنامه ندارد. این شرایط سبب می‌شود که حتی بتوان یک کلاس را در میان بدنه دستور شرط (if) یا درون بدنه یک تابع تعریف کرد. [در پشت صحنه]: با اجرای دستور تعریف کلاس، یک شی از نوع type در حافظه ایجاد می‌گردد و از نام کلاس برای اشاره به آن شی استفاده می‌شود.

 

بعد از کلمه کلیدی class نام کلاس (به دلخواه کاربر) نوشته می‌شود. سطر نخست تعریف مانند تمام دستورات مرکب (Compound) که به صورت معمول در چند سطر نوشته می‌شوند و سرآیند دارند، به کاراکتر : ختم می‌شود. از سطر دوم با رعایت یکنواخت تورفتگی دستورات بدنه کلاس نوشته می‌شوند:

 

>>> # Python 3.x

>>> class MyClassName:
...     pass
...
>>>

>>> type(MyClassName)
<class 'type'>

>>> MyClassName.__bases__
(<class 'object'>,)
>>>

 

در مواردی که هنوز نمی‌خواهیم دستورات مربوط به بدنه یک دستور به مانند کلاس را بنویسیم؛ می‌توانیم از دستور pass استفاده کنیم. با اجرای این دستور هیچ کاری انجام نمی‌شود.

>>> # Python 2.x

>>> class MyClassName(object):
...     pass
...
>>>

>>> type(MyClassName)
<type 'type'>

>>> MyClassName.__bases__
(<type 'object'>,)
>>>

 

تمامی کلاس‌ها در پایتون 3x به صورت ضمنی از کلاس object ارث‌بری دارند و نیازی به درج آن توسط برنامه‌نویس نیست؛ ولی در نسخه 2x چنانچه قصد داشته‌ باشیم از طراحی جدید کلاس‌ها پیروی کنیم، می‌بایست به صورت صریح از این کلاس ارث‌بری نماییم.

 

در بحث ارث‌بری نام کلاس(های) پایه مورد نظر درون پرانتز جلوی نام کلاس نوشته می‌شود. در صورت ارث‌بری از چند کلاس می‌بایست نام آن‌ها را توسط کاما (Comma) از یکدیگر جدا ساخت:

 

>>> # Python 3.x

>>> class ChildClassName(BaseClassNameOne, BaseClassNameTwo):
...     pass
...
>>>

>>> ChildClassName.__bases__
(<class '__main__.BaseClassNameOne'>, <class '__main__.BaseClassNameTwo'>)

 

همانطور که می‌دانیم،‌ __main__ اشاره به نام ماژول دارد.

 

با دقت در نمونه کد بالا متوجه می‌شوید که دیگر از کلاس object در میان کلاس‌های پایه خبری نیست. دلیل این اتفاق در این است که کلاس فرزند (ChildClassName) اکنون در یک سلسله مراتب وراثت قرار گرفته و کلاس‌های پایه او از این کلاس ارث‌بری دارند.

 

>>> # Python 2.x

>>> class BaseClassNameOne(object):
...     pass
...
>>>

>>> class BaseClassNameTwo(object):
...     pass
...
>>>

>>> class ChildClassName(BaseClassNameOne, BaseClassNameTwo):
...     pass
...
>>>

>>> ChildClassName.__bases__
(<class '__main__.BaseClassNameOne'>, <class '__main__.BaseClassNameTwo'>)

 

برای دریافت نام تمام کلاس‌های پایه موجود در سلسله مراتب وراثت یک کلاس مشخص می‌توانیم از تابع ()getmro درون ماژول inspect استفاده نماییم [

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
]؛ همانند پایین:

 

>>> # Python 3.x

>>> import inspect
>>> inspect.getmro(ChildClassName)
(<class '__main__.ChildClassName'>, <class '__main__.BaseClassNameOne'>, <class '__main__.BaseClassNameTwo'>, <class 'object'>)

 

>>> # Python 2.x

>>> import inspect
>>> inspect.getmro(ChildClassName)
(<class '__main__.ChildClassName'>, <class '__main__.BaseClassNameOne'>, <class '__main__.BaseClassNameTwo'>, <type 'object'>)

 

خروجی تابع ()getmro مرتب شده است؛ به این صورت که در یک سلسله مراتب از خود کلاس مورد نظر شروع می‌شود و به کلاس object پایان می‌یابد. کلاس‌های پایه هم سطح نیز بر اساس ترتیب نوشتن آن‌ها در کلاس فرزند مرتب می‌شوند.

  • Like 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

×