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


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


با تشکر
ارادتمند
تیم سکان

در پاسخ به

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

در پاسخ به

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

در پاسخ به

webkurdian
webkurdian
اوکی

در پاسخ به

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

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

در نهایت دوستانی که توانایی خرید این اموزش رو دارند بهتره که این آموزش ها رو از سایت gotoclass بخرن و در پایان هم گویا آزمونی گرفته میشه و اگر قبول بشن مدرک مورد تایید وزارت علوم رو میگیرن :
http://gotoclass.ir/courses/پایتون-مقدماتی/
pooya
pooya
با سلام من مدت 4 سال است در دانشگاه mit دوره برنامه نویسی را گذرانده ام و مخصوصا از دو سال گذشته به صورت حرفه ای روی پایتون کار کردم ایا اجازه دارم ادامه مطالب شما رو پست کنم البته تا انجا که در حد توانم باشه در حال حاضر ساکن رشت هستم و از مطالب شما استفاده کردم و مفید بود فعلا برای آموزش در شرکت گزیده ای از آن را بکار میبرم اگر موافق باشید مطالب جدیدی داشتم ارسال کنم ...
کاربر میهمان
کاربر میهمان
سلام سکان آکادمی عزیز
شخصی هستم که به دلیل مشکلات جسمی و روحی و گوشه گیری هایی که دارم قادر نیستم برای یادگیری این زبان از منزل خارج بشم. خیلی بابت شروع آموزش شما خوشحال بودم و داشتم کم کم به آینده امیدوار می شدم اما حالا که می بینم اموزش ها کنار گذاشته شده دیگه از زندگی تماما نا امیدم. دیگه فکرم به جایی نمی رسه و نمیدونم تو این زندگی بی معنایی که برای خودم ساختم چه کنم. هر روز به این صفحه سر میزنم و امید دارم که شما آموزش رو شروع کرده باشید ولی باز هم ...
دیگه نمیدونم تو زندگی چه کار کنم....
ادمین سایت
ادمین سایت
anno عزیز سلام،
از کامنتی که برایمان گذاشتید هم خرسند شدیم و هم ناراحت!
از این جهت خرسند شدیم که سهمی هرچند کوچک در امیدوار شدن شما به آینده داشته‌ایم و از این جهت هم ناراحت، که به خاطر نیمه رها شدن دوره‌ٔ آموزش پایتون، تجربهٔ کاربری بدی برای شما رقم زده‌ایم.
واقعیت امر آن است که ما در مملکتی زندگی می‌کنیم که بخش قابل‌توجهی از افراد از تعهد کاری کمی برخوردارند من‌جمله مدرس دورهٔ پایتون که همکاری خود را با ایشان آغاز کردیم که پس از مدتی، دوره را رها کرده و ضربه‌ای جبران ناپذیر به برند ما وارد آورد.
توصیه‌ٔ ما این است که هرگز ناامید نباشید و ادامهٔ روند آموزشی خود را از سایر وب‌سایت‌ها دنبال نمایید.

با عرض پوزش
ارادتمند
تیم سکان آکادمی

در پاسخ به

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

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

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

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام.
چرا وقتی دیکشنری به پایتون میدم، آیتمهاش به طور راندوم نشون داده میشه؟
مثلا: a:1, b:2, c:3, d:4.
b a d c.
آیا مشکلی توی سیستم منه یا کلا این مشکل برای همه هست؟
البته من فایلها رو با خط فرمان اجرا میکنم. مثل کاری که آقای علی انجام دادند و سوالشون رو من جواب دادم.
موفق باشید!
saeedx4
saeedx4
نیازی نیست که یک دیکشنری به صورت مرتب نشون داده بشه لیست نیست که مرتب بودنش برای شما اهمیت داشته باشه چون لیست از آیتم های لیست index base هستن برای ما مهمه که آیتمی که توی خانه 5 ذخیره کردیم همونجا ذخیره بشه و از همونجا هم قابل دسترس باشه.
اما قضیه در دیکشنری فرق میکنه چون دیکشنری index base نیست یعنی شمارشی نیست
اگه همچین دیکشنری داشته باشم
d = {\\\'a\\\':1, \\\'b\\\':2, \\\'c\\\':3, \\\'d\\\':4}
برای من مهم نیست تو خانه دوم چی ذخیره شده من با استفاده از کلید هر مقدار می تونم به اون دسترسی داشته باشم مثلا اگه بخوام به محتوای کلید c رو چاپ کنم می نویسیم print(d[\\\'c\\\']) دیگه برای من مهم نیست که c مقدارش کجا ذخیره شده من همیشه با دستور بالا می تونم محتوای c رو چاپ کنم.

اگه می خواید یک دیکشنری داشته باشید که کلیدهای اون مرتبط شده باشه از دستور زیر استفاده کنید:
sorted(d.items())

در پاسخ به

sara
sara
آموزشتون بسیار عالی بود ممنون از مطالب خوبتون
کاربر میهمان
کاربر میهمان
سلام میکنم خدمت مدیریت محترم و اعضای تیم سکان آکادمی.
از آموزشها و زحمات خانم نرگس اسدی هم تشکر ویژه میکنم.
من روشندلم و مدتیه که اصرار دارم زبان پایتون رو یاد بگیرم و برای برنامه‌های خاصی استفاده کنم.
میخواستم جواب سوال یکی‌از اعضا رو بدم.
اگه دوست دارید خروجی رو بدون استفاده از آیدل ببینید، آخر هر برنامه این کد رو بنویسید:
end=input()
با این کد، سیستم منتظر ورودیهای کاربر میمونه. بدین‌ترتیب، سیستم تا چیزی از کاربر نگیره و تا کاربر اینتر نزنه، برنامه رو باز نگه‌میداره.
موفق باشید.
کاربر میهمان
کاربر میهمان
نحوه درس دادن خانم اسدی فوق العاده بود کاش اموزش را ادامه میدادند
باتشکر از خانم اسدی و گروه خوب سکان اکادمی
dargi
dargi
با سلام و سپاس از مدير محترم سكان آكادمي
ميخواستم عرض كنم اي كاش بتونين باز هم از همين مدرس استفاده كنيد
اقعا روش تدريس ايشون عاليه و كاملاً مطلب رو به من كه خيلي كند ذهن هستم حالي كرد
از شما هم ممنون
ادمین سایت
ادمین سایت
با سلام
متاسفانه امکان همکاری مجدد با ایشان را نداریم

ارادتمند
تیم سکان آکادمی

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام ایا امکانش هست چند تا توابع پر کاربرد مثل sys, os و .. اموزش بدید ؟ !
کاربر میهمان
کاربر میهمان

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

با تشکر
تیم سکان آکادمی

در پاسخ به

محمدهادی
محمدهادی
حیف شد :(
روش تدریسشون خوب بود.

در پاسخ به

limoresa
limoresa
تقدیم صمیمانه ترین احترامات و سپاس فراوان خدمت مدرس محترم و سایر اعضای تیم سکان آکادمی
برایتان آرزوی سربلندی و پیروزی دارم
مطالب این آموزش واقعا مفید هستند و حساب شده و منظم بیان شده اند .... خداقوت ، دست مریزاد
کاربر میهمان
کاربر میهمان
Long Time, No See
دست سکان درد نکنه به خصوص خانم اسدی. تو رو خدا ایدامه بدین من به پایتون برای کارم نیاز دارم.