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


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

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

در پایتون ماژول ها بخش های کوچکی از یک برنامه ی بزرگ تری هستند به طوری که هر Module (ماژول یا بخش) یک فایل جداگانه روی هارد کامپیوتر شما است. شما می توانید یک برنامه ی بزرگ را انتخاب کنید و آن را به چندین ماژول یا فایل جداگانه تقسیم کنید، یا به شکلی دیگر یک ماژول کوچک را انتخاب کنید و با افزودن کدهای دیگر، آن را تبدیل به یک برنامه ی بزرگ کنید. ممکن است این سوال پیش بیاید که چرا لازم است برنامه ها ماژولار نوشته شوند و چرا تمام کدهای برنامه را در یک فایل نمی نویسیم؟ دلایل مختلفی برای این کار وجود دارند که مهم ترین آن ها عبارتند از:

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

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

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

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

# this is the file "MyModule.py"
# we're going to use it in another program
def celsiusToFahrenheit(celsius):
    fahrenheit = ((celsius * 9.0) / 5 ) + 32
    return Fahrenheit

با ذخیره ی این کد یک ماژول ساخته می شود که درون آن تنها یک فانکشن ()celsiusToFahrenheit قرار دارد که وظیفه ی آن تبدیل دما از درجه ی سانتی گراد به فارنهایت است.

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

در چنین مواردی در پایتون از کیورد import (ایمپورت به معنی وارد کردن) استفاده می کنیم که امکان استفاده از سایر ماژول ها و امکانات آن ها را در یک برنامه ی دیگر برای ما فراهم می کند. برای این کار کیورد import و در ادامه ی آن نام ماژول را می آوریم، برای مثال می نویسیم import MyModule. اکنون یک پنجره ی جدید در ویرایشگر آیدل باز می کنیم و کدهای برنامه ی اصلی را در آن وارد می کنیم:

import MyModule
celsius = float(input ("Enter a temperature in Celsius: "))
fahrenheit = MyModule.celsiusToFahrenheit(celsius)
print("That's ", fahrenheit, " degrees Fahrenheit")

در خط اول این برنامه با آوردن کیورد import ماژول MyModule که در فایلی با نام MyModule.py ذخیره شده بود را برای استفاده وارد برنامه ی کرده ایم. اکنون می توانیم با استفاده از نام این ماژول در هر جای برنامه فانکشن درون آن را فراخوانی کنیم. سپس از کاربر می خواهیم عددی را به عنوان آرگومان فانکشن وارد کند و آن را در متغیر celsius ذخیره می کنیم. آن گاه فانکشن ()celsiusToFahrenheit را فراخوانی کرده و این متغیر را به آن پاس می دهیم.

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

خروجی فانکشن مورد نظر در متغیر Fahrenheit ذخیره شده است تا برای چاپ در خط بعد از آن استفاده شود.

برنامه ی فوق را در فایلی با نام Modular.py ذخیره می کنیم. دقت داشته باشید برای درست کارکردن برنامه در زمان اجرا باید آن را در همان دایرکتوری که فایل ایمپورت شده را ذخیره کرده بودیم قرار دهیم، چرا که در غیر این صورت، مفسر پایتون نمی تواند فایل ایمپورت شده را پیدا کند. یک نمونه خروجی حاصل از اجرای برنامه به شکل زیر است:

Enter a temperature in Celsius: 65
That's  149.0  degrees Fahrenheit
>>>

دقت داشته باشید که اگر دستور ایمپورت را از ابتدای این برنامه حذف کنیم با خطای زیر در هنگام اجرای آن روبه رو خواهیم شد:

Enter a temperature in Celsius: 54
Traceback (most recent call last):
  File "C:/Users/Admin/Desktop/Modular.py", line 3, in 
    fahrenheit = MyModule.celsiusToFahrenheit(celsius)
NameError: name 'MyModule' is not defined

همان طور که در خط آخر می بینیم، با ارور MyModule is not defined به معنی «MyModule تعریف نشده است» مواجه می شویم.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
webkurdian
webkurdian
با سلام و خسته نباشید خدمت تیم محترم سکان آکادمی.
ببخشید تا چند دهه دیگه مدرس پیدا می کنید؟امیدوارم تا اون موقع دانسمندان راه حلی را برای حرف زدن با مرده ها کشف کنند.اخه این طور پیداست حالا حالا ها باید صبر کنیم!!!
کاربر میهمان
saeedmzmمن یک کاربر مهمان هستم
من اینجا کامنت های واقعا تاثیر گذاری رو دیدم ....
دوستان یک کورس خیلی خوب دیگه هست از جادی که در واقع در سایت آموزشی gotoclass قرار گرفته . یک مسئله هست . اونم اینکه این آموزش در اصل رایگان نیست و برای گرفتن ویدئو های آموزش اون باید اون رو بخرید اما.... توی سایت مدرس این آموزش( جادی ) خودش توضیح داده که کسایی که توانایی پرداخت هزینه رو نداره خیلی راحت به من ایمیل بزنن تا رایگان براشون آموزش ها رو بفرستم. در واقع توی این پست توضیح داده : https://jadi.net/2017/01/gotoclass-python

این هم آدرس ایمیل جادی :
jadijadi@gmail.com

در نهایت دوستانی که توانایی خرید این اموزش رو دارند بهتره که این آموزش ها رو از سایت gotoclass بخرن و در پایان هم گویا آزمونی گرفته میشه و اگر قبول بشن مدرک مورد تایید وزارت علوم رو میگیرن :
http://gotoclass.ir/courses/پایتون-مقدماتی/
pooya
pooya
با سلام من مدت 4 سال است در دانشگاه mit دوره برنامه نویسی را گذرانده ام و مخصوصا از دو سال گذشته به صورت حرفه ای روی پایتون کار کردم ایا اجازه دارم ادامه مطالب شما رو پست کنم البته تا انجا که در حد توانم باشه در حال حاضر ساکن رشت هستم و از مطالب شما استفاده کردم و مفید بود فعلا برای آموزش در شرکت گزیده ای از آن را بکار میبرم اگر موافق باشید مطالب جدیدی داشتم ارسال کنم ...
کاربر میهمان
annoمن یک کاربر مهمان هستم
سلام سکان آکادمی عزیز
شخصی هستم که به دلیل مشکلات جسمی و روحی و گوشه گیری هایی که دارم قادر نیستم برای یادگیری این زبان از منزل خارج بشم. خیلی بابت شروع آموزش شما خوشحال بودم و داشتم کم کم به آینده امیدوار می شدم اما حالا که می بینم اموزش ها کنار گذاشته شده دیگه از زندگی تماما نا امیدم. دیگه فکرم به جایی نمی رسه و نمیدونم تو این زندگی بی معنایی که برای خودم ساختم چه کنم. هر روز به این صفحه سر میزنم و امید دارم که شما آموزش رو شروع کرده باشید ولی باز هم ...
دیگه نمیدونم تو زندگی چه کار کنم....
کاربر میهمان
rezaمن یک کاربر مهمان هستم
سلام چرا آموزش پایتون رو کامل نمی کنید منتظریم ممنون
کاربر میهمان
حسن ذوالفقاریمن یک کاربر مهمان هستم
سلام خدمت مدیریت و اعضای محترم تیم سکان آکادمی.\r
همینطور که قبلا خودم رو معرفی کردم، من نابینا هستم. به زبان پایتون هم خیلی علاقه دارم.\r
اما متاسفانه هیچ آموزش قوی و مداومی در ایران دریافت نمیکنم. سایتهای خارجی هم زبونشون برام خیلی گویا نیست و با خطای ترجمه مواجه میشم.\r
مشکل هم در ایران اینه که هر آموزشی که شروع میشه، پایان نداره و ناگهان به دلایلی متوقف میشه. اینه که منم از ادامه‌ی یادگیری این زبان محبوب باید دچار سردرگمی بشم و ولو ناخواسته کنارش بذارم.\r
خواهش میکنم هرچه زودتر این آموزش رو ادامه بدید. چون همونطور که ریاضی و زبان خارجه رو اگه نیمه‌کاره ولش کنیم، همینم که یاد گرفتیم، هیچ نتیجه‌ی دقیق و جذابی بعدها نخواهد داشت.\r
ضمنا من خیلی دوست دارم این زبون رو یاد بگیرم. چون من نابینا هستم و با نرم‌افزار صفحه‌خوان nvda کار میکنم. این برنامه افزونه‌هایی برای نرم‌افزارهای مختلف داره که باعث میشه با بعضی برنامه‌ها راحتتر کار کنیم. لذا از شما خواهش میکنم منبع معتبر و مناسبی برای من معرفی کنید تا بتونم نرم‌افزارهای مورد‌نیازم رو برای این صفحه‌خوان محبوب و رایگان دسترسپذیر کنم.\r
سربلند و موفق باشید. حسن ذوالفقاری.
behzad6870
behzad6870
خسته نباشید واقعا
دروصورت امکان لطفا ادامه داده شود
باتشکر
کاربر میهمان
aliمن یک کاربر مهمان هستم
با تشکر فراوان از زحمات و ساده گویی شما در ارایه این مطلب. امید است که ادامه این دوره آموزشی هر چه سریعتر با همت والای شما از سر گرفته شود.
کاربر میهمان
حمیدرضامن یک کاربر مهمان هستم
اموزش دیگه ادامه پیدا نمیکند ؟
کاربر میهمان
حسن ذوالفقاریمن یک کاربر مهمان هستم
سلام.
چرا وقتی دیکشنری به پایتون میدم، آیتمهاش به طور راندوم نشون داده میشه؟
مثلا: a:1, b:2, c:3, d:4.
b a d c.
آیا مشکلی توی سیستم منه یا کلا این مشکل برای همه هست؟
البته من فایلها رو با خط فرمان اجرا میکنم. مثل کاری که آقای علی انجام دادند و سوالشون رو من جواب دادم.
موفق باشید!