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

آنچه در این مطلب می‌آموزید:

  • با مهم‌ترین ماژول‌های درونی پایتون و عملکرد آن‌ها آشنا می‌شوید.

  • یاد می‌گیرید که چطور ماژول مورد نظر خودتان را تعریف کنید.

  • با کلمه کلیدی import آشنا شده و تکنیک‌های مختلف کار با آن را می‌آموزید.

  • با sys.path و PYTHONPATH آشنا می‌شوید و روش استفاده از آن‌ها را یاد می‌گیرید.

  • مهم‌ترین صفات ماژول را می‌شناسید و روش دسترسی به آن‌ها را می‌آموزید.

  • با توابع dir و reload آشنا شده و نحوه استفاده از آن‌ها را یاد می‌گیرید.

فهرست مطالب این نوشته
997696

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

ماژول در پایتون چیست؟

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

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

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

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

Square root of 100: 10.0

ماژول‌ درونی در پایتون چیست؟

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

۵ مورد از مهمترین ماژول‌های درونی پایتون
ماژول‌های درونی پرکاربرد پایتون

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

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

در فهرست پایین، مهم‌ترین ماژول‌های درونی پایتون را معرفی کرده‌ایم.

  1. os: در ماژول os، توابع مختلفی برای استفاده از توانایی‌های سیستم عامل وجود دارد.
  2. string: در این ماژول، ابزارهای متنوعی برای کار بر روی متن و نوع داده رشته، تعبیه شده‌اند.
  3. re: این ماژول با استفاده از «عبارت‌های منظم» (Regular Expressions) به کاربران برای کار با الگوهای متنی کمک می‌کند.
  4. math: در این ماژول توابع ریاضی مختلفی برای کار با اعداد ده‌دهی تعبیه شده‌اند.
  5. cmath: در ماژول cmath توابع ریاضی متنوعی برای کار با اعداد مختلط تعبیه شده‌اند.
  6. datetime: با کمک ماژول datetime، می‌توانیم از تاریخ و زمان در برنامه‌های خود استفاده کنیم.
  7. gc: با استفاده از این ماژول می‌توانیم با سیستم Garbage Collection درونی پایتون تعامل داشته باشیم.
  8. asyncio: با کمک این ماژول می‌توانیم کدهای غیرهمزمان را اجرا کنیم.
  9. Collections: این ماژول، شامل ظرف‌های پیشرفته‌ای برای نگهداری انواع داده‌ی مختلف است.
  10. functools: این ماژول ابزارهای خاصی برای استفاده از اشیاء قابل فراخوانی در اختیار توسعه‌دهندگان قرار می‌دهد. استفاده از این ابزارها در روش برنامه نویسی تابعی کاربرد زیادی دارد.
  11. operator: توابع متناظر با عملگرهای استاندارد در این ماژول قرار دارند.
  12. pickle: با به‌کارگیری این ماژول می‌توانید اشیاء پایتون را روی فایل‌های معمولی ذخیره کرده و در صورت نیاز آن‌ها را فراخوانی کند.
  13. socket: این ماژول، رابط سطح پایینی برای برنامه نویسی شبکه و سوکت نویسی فراهم می‌کند.
  14. sqlite3: توسعه‌دهندگان با کمک ماژول sqlite3 می‌توانند از پایگاه داده SQLite برای ذخیره‌سازی داده‌ها استفاده کنند.
  15. statistics: در این ماژول توابع ریاضی برای کار بر روی محاسبات آماری قرار گرفته‌اند.
  16. typing: این ماژول به توسعه‌دهندگان کمک می‌کند تا برای مشخص کردن نوع متغیرها توضیحات اضافی بنویسند.
  17. venv: از ماژول venv برای ساخت محیط مجازی پایتون استفاده می‌شود.
  18. json: با استفاده از ماژول json می‌توانیم داده‌ها را به شکل JSON نوشته یا داده‌های JSON را بخوانیم.
  19. wsgiref: ماژول‌ wsgiref هم ابزارهای مخصوصی را برای ساخت اپلیکیشن‌های تحت وب با WSGI ارائه می‌دهد.
  20. unittest: با کمک این ماژول می‌توانیم کدهای نوشته شده را بررسی کنیم.
  21. random: با استفاده از ماژول random اعداد تصادفی ایجاد می‌کنیم.
  22. sys: ماژول sys برای تعامل با مفسر پایتون به کار برده می‌شود.
  23. requests: ماژول requests برای ارسال درخواست‌های HTTP به وب‌سایت‌ها و سرویس‌های اینترنتی کاربرد دارد.
  24. itertools: ماژول itertools برای پیمایش ساختار‌هایی مانند لیست، تاپل و غیره به کار برده می‌شود. این ماژول ابزارهای مخصوصی برای ساخت و کار با پیمایشگرها ارائه می‌دهد.
  25. locale: ماژول locale به برنامه نویسان کمک می‌کند تا برای کشور‌های مختلف، قوانین متفاوتی تعریف کرده و از آن‌ها استفاده کنند. در واقع توسعه‌دهندگان با کمک این ماژول روش نمایش اعداد، تاریخ و پول را – بر اساس زبان و منطقه‌های زمانی – تعیین می‌کنند. با کمک این ماژول، برنامه پایتون متناسب با کاربرانی در بخش‌های گوناگون جهان کار می‌کند.

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

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

مجموعه آموزش برنامه نویسی پایتون Python – مقدماتی تا پیشرفته
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزش برنامه نویسی پایتون Python از مقدماتی تا پیشرفته هدایت شوید.

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

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

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

ساخت ماژول در پایتون

ساختن ماژول، کار بسیار ساده‌ای است. فقط کافی است که کدهای نوشته شده پایتون را با نام دلخواه و پسوند .py  توسط یکی از از کد ادیتور‌ها ذخیره کنیم. برای مثال به کد زیر توجه کنید. این کد را در فایلی با نام mymodule.py  ذخیره کرده و آن را به ماژول تبدیل می‌کنیم.

اکنون می‌توانیم فایل mymodule.py  را در ترمینال اصلی پایتون وارد کنیم. برای انجام این کار باید از کلمه کلیدی import  استفاده کنیم.

توسعه دهندگان پایتون می‌توانند ماژول‌های دیگری را هم در اسکریپت‌های پایتونی import  کنند. برای تمرین اجرای این عملیات، کد زیر را در فایلی به نام example.py  ذخیره می‌کنیم.

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

Hi Mostafa! How are you?

استفاده از عبارت import

در زبان برنامه نویسی پایتون برای بارگذاری اشیاء مختلف از ماژول مشخص شده از عبارت import  استفاده می‌شود. این شیء می‌تواند کلاس، تابع، متغیر یا هر چیز دیگری باشد. شاید ماژولی شامل چند شیء مختلف است. با استفاده از import  می‌توانیم تمام آن‌ها به فضای نام پایتون وارد کرده و استفاده کنیم.

برای بررسی روش استفاده از عبارت import، کدهای پایین را در فایلی به نام mymodule.py  نوشته و ذخیره می‌کنیم.

اگر کد import mymodule  را در یکی از اسکرپیت‌های پایتون بنویسیم، تمام ماژول‌های تعریف شده در mymodule.py  به فضای نام مربوط به محل کار فعلی، اضافه می‌شوند. هر تابعی در ماژول وارد شده به عنوان صفتی از شیء ماژول شناخته می‌شود.

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

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

برای مثال با کمک کد mymodule.sum() تابع sum()  را فراخوانی می‌کنیم.

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

sum:30
average:15.0
power:100

وارد کردن شیء خاصی از ماژول

برای وارد کردن شیء خاصی از ماژول باید سینتکس from … import … را به کار ببریم. استفاده خالی از عبارت import  باعث می‌شود که تمام چیزهای موجود در ماژول به فضای نام فعلی اضافه شوند. اما شاید بخواهیم که فقط اشیاء خاصی از این ماژول به فضای نام وارد شوند. برای انجام دادن این کار باید از سینتکس معرفی شده استفاده کنیم. برای مثال، سه تابع مختلف در ماژول mymodule  ذخیره شده‌اند. اما در اسکریپت پایین فقط دو مورد از آن‌ها وارد شده و قابل استفاده هستند.

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

sum: 30
average: 15.0

نکته: در زمان فراخوانی ماژول‌ها با استفاده از سینتکس from … import … دیگر لازم نیست نام ماژول را به عنوان پیشوند به کار ببریم.

وارد کردن همه چیز از ماژول

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

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

استفاده از import برای تغییر نام دادن ماژول‌ها

با استفاده از کلمه کلیدی import  می‌توانیم به ماژول‌ها وارد شده، نام مستعار اختصاص بدهیم. برای انجام دادن اینکار از سینتکس زیر استفاده می کنیم.

در سینتکس بالا دو پارامتر وجود دارند.

  • modulename : پارامتر modulename  نام واقعی ماژول مورد استفاده است.
  • alias : پارامتر alias  نیز همان نام مستعاری است که برای ماژول خود انتخاب می‌کنیم.

در زمان استفاده از توابع ماژول باید این نام مستعار را به عنوان پیش‌وند به کار ببریم. برای کمک به درک بهتر این مطلب در کادر زیر، مثال ساده‌ای را بررسی کرده‌ایم.

تعیین مکان ماژول‌ها

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

  1. ابتدا دایرکتوری فعلی یا همان‌جا که فایل مورد استفاده را ذخیره کرده‌ایم.
  2. اگر ماژول در این دایرکتوری پیدا نشد، تمام مکان‌هایی را جست‌وجو می‌کند که در متغیر محیطی به نام «PYTHONPATH» ذخیره شده‌اند.
  3. اگر هنوز هم موفق به پیدا کردن ماژول مورد نظر نشد، داخل پوشه پیش‌فرض پایتون را می‌گردد. در سیستم‌های بر مبنای یونیکس معمولا پوشه پیش‌فرض در مسیر «/usr/local/lib/python/» قرار دارد.

پایتون آدرس و نام اعضای این فهرست را در متغیری به نام «sys.path» نگهداری می‌کند. این متغیر قسمتی از ماژول sys  است. در متغیر sys.path مواردی مانند پوشه فعلی، PYTHONPATH  و پوشه پیش‌فرض ذخیره می‌شوند.

نکته: آدرس دقیق پوشه پیش‌فرض ممکن است بسته به روش نصب شدن پایتون در سیستم، تغییر کند.

متغیر PYTHONPATH

PYTHONPATH  متغیر محیطی است. این متغیر شامل فهرستی از دایرکتوری‌ها است. پایتون برای پیدا کردن ماژول‌ها درون این دایرکتوری‌ها را می‌گردد. سینتکس PYTHONPATH  شبیه به روش نوشتن متغیر «PATH» در شل سیستم عامل است.

ساختار ماژولار کدهای پایتون با استفاده از بلوک‌های سیاه و نارنجی متصل بهم نشان داده شده‌اند - ماژول در پایتون چیست

در پایین PYTHONPATH  استاندارد سیستم عامل ویندوز آورده شده است.

set PYTHONPATH = c:python20lib;

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

set PYTHONPATH = /usr/local/lib/python

فضای نام و تعیین محدوده

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

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

  • فضای نام‌ محلی: از این فضای نام برای ذخیره کردن نام متغیرهای محلی استفاده می‌شود که درون تابع تعریف شده‌اند.
  • فضای نام سراسری: متغیر‌هایی که خارج از هر تابعی و در محیط اصلی برنامه تعریف شده‌اند، در این فضای نام ثبت می‌شوند.

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

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

عبارت global VarName  به پایتون می‌گوید متغیر VarName  از نوع متغیر‌های سراسری است. در نتیجه پایتون برای اجرای عملیات خود در فضای نام محلی به دنبال آن متغیر نمی‌گردد.

مثالی از تعریف متغیر محلی

در این بخش از مطلب، به منظور ارائه توضیح بهتر از مثال ساده‌ای استفاده کرده‌ایم. ابتدا متغیر سراسری به نام Money  تعریف کردیم. در خط بعد تابعی به نام AddMoney()  ساخته‌ایم. در داخل تابع AddMoney()  مقدار یک واحد به متغیر Money اضافه می‌کنیم. در این برنامه، پایتون فرض می‌کند که متغیر Money  از نوع متغیر‌های محلی است. البته در این برنامه قبل از مقداردهی به متغیر Money  به مقدار آن دسترسی پیدا کرده‌ایم. در نتیجه با خطای UnboundLocalError  روبه‌رو می‌شویم. برای برطرف کردن این خطا باید کد # global Money  را از حالت کامنت خارج کنیم.

صفات ماژول

برای اینکه بدانیم ماژول در پایتون چیست باید با کلاس module  آشنا شویم. هر ماژول پایتون در واقعی شيئی از کلاس module  است. بنابراین چند صفت درونی در آن وجود دارد.

در فهرست پایین چند مورد از مشهور‌ترین صفات ماژول‌ها را نام برده‌ایم.

  • __file__: این صفت نام فایلی را نشان می‌دهد که ماژول در آن تعریف شده است.
  • __package__: در این صفت نام پکیجی قرار دارد که این ماژول زیر مجموعه آن است.
  • __doc__: صفت __doc__ شامل «داکسترینگ» (Docstring) ابتدای ماژول است. البته به شرطی که برای ماژول داکسترینگ تعریف شده باشد.
  • __dict__: تمام محتوای ماژول را نشان می‌دهد.
  • __name__: نام ماژول را نشان می‌دهد.

برای نمونه فرض کنیم که کدهای زیر را در فایلی با نام mymodule.py  ذخیره کرده‌ایم.

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

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

__file__ attribute: C:mathexamplesmymodule.py
__doc__ attribute: The docstring of mymodule
__name__ attribute: mymodule

صفت __name__

صفت __name__  در ماژول‌‌های پایتون اهمیت بسیار زیادی دارد. در این بخش از مطلب می‌خواهیم ویژگی‌های آن را بررسی کنیم. اگر در شل پایتون این صفت را نوشته و دکمه «Enter» را فشار دهیم، در خروجی عبارت __main__  نمایش داده می‌شود.

هر ماژولی را که در مفسر پایتون import  کنیم، پایتون، صفت خالی به نام __name__  را به آن اختصاص می‌دهد. مقدار این صفت برابر با نام ماژول است.

اگر __name__  را در داخل هر کدام از اسکریپت‌های پایتون فراخوانی کنیم، در خروجی، مقدار ‘__main__’ برمی‌گرداند.

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

__name__ attribute within a script: __main__

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

  • خود اسکریپت به عنوان برنامه مستقلی اجرا شود.
  • استکریپت به عنوان ماژول در برنامه دیگری به کار برده شود.

پایتون بر عکس زبان‌هایی مانند ++C و Java و سی شارپ است. یعنی اینکه پایتون به مفهومی به نام تابع main()  نیاز ندارد. تمام فایل‌های پایتون – که با پسوند .py شناخته می‌شوند – می‌توانند شامل توابع و کدهای قابل اجرا باشند.

کد‌های پایین را در فایل mymodule.py  نوشته و ذخیره کنید.

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

sum: 30

اکنون می‌خواهیم از تابع sum()  در اسکریپت دیگری استفاده کنیم. بنابراین ابتدا ماژول mymodule.py  را import  می‌کنیم. اسم اسکریپت جدید example.py  است.

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

sum: 30
sum: 30

مشاهده می‌کنید که در این خروجی، عبارت sum:30  دوبار ظاهر شده است. دفعه اول، وقتی است که ماژول mymodule  را به محیط کدنویسی import  کرده‌ایم. چون درون این ماژول، کدهای قابل اجرا وجود دارد، پایتون همان لحظه آن‌ها را اجرا می‌کند. اجرای دوم مربوط به زمانی است که در خود اسکریپت یا برنامه example.py  مقدار این ماژول را فراخوانی کردیم.

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

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

برای انجام دادن این کار می‌توانیم از مقدار ویژگی __name__  استفاده کنیم. اگر مقدار __name__  برابر با ‘__main__’ بود، به معنای آن است که این فایل به صورت مستقیم اجرا شده است. یعنی از جای دیگری import  نشده است. بنابراین می‌توانیم کدهای اجرای را در داخل این شرط بنویسیم. روش تنظیم کردن این شرط را در مثال پایین بررسی کرده‌ایم. در این صورت فقط توابع مورد نظر به محیط کدنویسی جدید اضافه می‌شوند. بقیه کدها اجرا نمی‌شوند. مگر اینکه خود فایل به صورت مستقل اجرا شود.

برای اضافه کردن عبارت if به ماژول mymodule.py  به روش زیر، اقدام می‌کنیم.

اکنون دوباره برنامه example.py  را اجرا می‌کنیم. مشاهده می‌کنید که عبارتsum:30  فقط یک بار در خروجی، ظاهر شده است.

sum:30 

یادگیری پایتون همراه با پیاده سازی پروژه های واقعی

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

در فهرست پایین، چند فیلم‌ آموزشی پروژه‌محور پایتون را معرفی کرده‌ایم.

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

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

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

دو تابع کاربردی ماژول در پایتون

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

  • تابع reload()
  • تابع dir()

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

 تابع reload برای بارگذاری مجدد ماژول

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

نمودار توابع کاربردی در زمان کار با ماژول‌های پایتون
توابع کاربردی در زمان کار با ماژول‌های پایتون

در مثال پایین، ماژولی به نام test.py  ساخته‌ایم. تابع زیر را در این ماژول نوشته و آن را ذخیره می‌کنیم.

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

اکنون فرض کنیم که می‌خواهیم تغییراتی را در تابع SayHello()  بوجود بیاوریم. برای مثال در کادر زیر، عبارت‌هایی را به این تابع اضافه کرده‌ایم.

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

مشاهده نام‌های درون ماژول با تابع dir

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

در کادر پایین با استفاده از مثال ساده‌ای این مطلب را بررسی کرده‌ایم.

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

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

پکیج‌ های پایتون

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

فرض کنیم که دایرکتوری به نام Phone  داریم. در داخل این دایرکتوری فایلی به نام Pots.py  وجود دارد. کد زیر در این فایل، نوشته شده است.

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

  • تابع Isdn()  در فایل «Phone/Isdn.py» قرار دارد.
  • تابع G3()  هم در فایل «Phone/G3.py» ذخیره شده است.

اکنون فایل دیگری با نام __init__.py  در فولدر Phone  ایجاد می‌کنیم.

حالا می‌خواهیم تمام توابع تعریف شده در این فایل‌ها با import  کردن Phone  در دسترس باشند. یعنی در واقع Phone  را به پکیج، تبدیل کنیم. برای انجام دادن این کار باید عبارت‌های import  پایین را در فایل __init__.py  بنویسیم. در کادر پایین، روش نوشتن این عبارت‌ها را پیاده‌سازی کرده‌ایم.

بعد از نوشتن کدهای بالا در فایل __init__.py  به راحتی می‌توانیم از توابع G3()  و Isdn()  و Pots()  استفاده کنیم. برای این کار فقط کافیست که Phone  را به محیط کدنویسی خود وارد کنیم. سپس از Phone  به عنوان پیش‌وند نام این توابع استفاده می‌کنیم.

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

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

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

جمع‌بندی

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

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

source

توسط expressjs.ir