آموزش ماژول ها در برنامه نویسی پایتون 3
آموزش ماژول ها در برنامه نویسی پایتون 3
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش ماژول ها در برنامه نویسی پایتون 3 خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش پایتون
یک ماژول به شما امکان می دهد کدهای پایتون خود را به صورت منطقی سازماندهی کنید. گروه بندی کدهای مرتبط در یک ماژول، درک و استفاده از کد را آسان تر می کند. یک ماژول یک شیء پایتون با ویژگیهای نامگذاری شده دلخواه است که میتوانید به آنها متصل و ارجاع دهید.
به سادگی، یک ماژول فایلی است که از کد پایتون تشکیل شده است. یک ماژول می تواند توابع، کلاس ها و متغیرها را تعریف کند. یک ماژول همچنین می تواند شامل کدهای قابل اجرا باشد.
مثال
کد پایتون برای یک ماژول به نام aname معمولاً در یک فایل namedaname.py قرار دارد. در اینجا نمونه ای از یک ماژول ساده، support.py − است
1 2 3 |
def print_func( par ): print "Hello : ", par return |
شما می توانید از هر فایل منبع پایتون به عنوان یک ماژول با اجرای یک دستور import در برخی از فایل های منبع پایتون دیگر استفاده کنید. وارد کردن دستور زیر را دارد –
1 |
import module1[, module2[,... moduleN] |
هنگامی که مفسر با دستور import مواجه می شود، اگر ماژول در مسیر جستجو وجود داشته باشد، ماژول را وارد می کند. مسیر جستجو لیستی از دایرکتوری ها است که مفسر قبل از وارد کردن یک ماژول جستجو می کند. به عنوان مثال، برای وارد کردن ماژول hello.py، باید دستور زیر را در بالای اسکریپت قرار دهید –
1 2 3 4 5 6 7 |
#!/usr/bin/python3 # Import module support import support # Now you can call defined function that module as follows support.print_func("Zara") |
هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –
1 |
Hello : Zara |
یک ماژول صرف نظر از تعداد دفعاتی که وارد می شود فقط یک بار بارگذاری می شود. این امر مانع از تکرار مکرر اجرای ماژول می شود، در صورتی که واردات چندگانه رخ دهد.
دستور from…import
دستور from Python به شما امکان می دهد ویژگی های خاصی را از یک ماژول به فضای نام فعلی وارد کنید. دستور from…import دارای نحو زیر است –
1 |
from modname import name1[, name2[, ... nameN]] |
به عنوان مثال، برای وارد کردن تابع فیبوناچی از فیب ماژول، از عبارت زیر استفاده کنید –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/python3 # Fibonacci numbers module def fib(n): # return Fibonacci series up to n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a + b return result >>> from fib import fib >>> fib(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] |
این عبارت کل فیب ماژول را در فضای نام فعلی وارد نمی کند. فقط مورد فیبوناچی را از فیب ماژول به جدول نماد جهانی ماژول واردکننده معرفی می کند.
دستور *from…import
همچنین میتوان با استفاده از دستور import زیر، همه نامها را از یک ماژول به فضای نام فعلی وارد کرد
1 |
from modname import * |
این یک راه آسان برای وارد کردن همه موارد از یک ماژول به فضای نام فعلی را فراهم می کند. با این حال، این بیانیه باید به مقدار کم استفاده شود.
اجرای ماژول ها به صورت اسکریپت
در یک ماژول، نام ماژول (به عنوان یک رشته) به عنوان مقدار متغیر جهانی __name__ در دسترس است. کد موجود در ماژول اجرا می شود، درست مثل اینکه شما آن را وارد کرده اید، اما با __name__ تنظیم شده روی “__main__”.
این کد را در انتهای ماژول خود اضافه کنید –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/python3 # Fibonacci numbers module def fib(n): # return Fibonacci series up to n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a + b return result if __name__ == "__main__": f = fib(100) print(f) |
مکان یابی ماژول ها
هنگامی که یک ماژول را وارد می کنید، مفسر پایتون ماژول را در دنباله های زیر جستجو می کند –
- دایرکتوری فعلی
- اگر ماژول پیدا نشد، پایتون سپس هر دایرکتوری را در متغیر پوسته PYTHONPATH جستجو می کند.
- اگر همه چیز شکست خورد، پایتون مسیر پیش فرض را بررسی می کند. در یونیکس، این مسیر پیش فرض معمولا /usr/local/lib/python3/ است.
مسیر جستجوی ماژول در سیستم ماژول sys به عنوان متغیر sys.path ذخیره می شود. متغیر sys.path شامل دایرکتوری فعلی، PYTHONPATH و پیشفرض وابسته به نصب است.
متغیر PYTHONPATH
PYTHONPATH یک متغیر محیطی است که از فهرستی از دایرکتوری ها تشکیل شده است. سینتکس PYTHONPATH همانند متغییر پوسته PATH است.
در اینجا یک PYTHONPATH معمولی از یک سیستم ویندوز است –
1 |
set PYTHONPATH = c:\python34\lib; |
و در اینجا یک PYTHONPATH معمولی از یک سیستم یونیکس – است
1 |
set PYTHONPATH = /usr/local/lib/python |
فضاهای نام و محدوده
متغیرها نام هایی (شناسه) هستند که به اشیا نگاشت می شوند. فضای نام فرهنگ لغت نام متغیرها (کلیدها) و اشیاء (مقدار) مربوط به آنها است.
- یک دستور پایتون می تواند به متغیرها در یک فضای نام محلی و در فضای نام سراسری دسترسی داشته باشد. اگر یک متغیر محلی و یک متغیر سراسری نام یکسانی داشته باشند، متغیر محلی، متغیر سراسری را سایه میاندازد.
- هر تابع فضای نام محلی خود را دارد. متدهای کلاس از همان قاعده محدوده بندی مانند توابع معمولی پیروی می کنند.
- پایتون در مورد محلی یا جهانی بودن متغیرها حدس می زند. فرض بر این است که هر متغیری که مقداری را در یک تابع اختصاص میدهد محلی است.
- بنابراین، برای تخصیص یک مقدار به یک متغیر سراسری در یک تابع، ابتدا باید از عبارت global استفاده کنید.
- دستور global VarName به پایتون می گوید که VarName یک متغیر جهانی است. پایتون جستجوی فضای نام محلی برای متغیر را متوقف می کند.
به عنوان مثال، ما یک متغیر Money را در فضای نام جهانی تعریف می کنیم. در تابع Money، ما یک مقدار به Money اختصاص می دهیم، بنابراین پایتون Money را به عنوان یک متغیر محلی فرض می کند.
با این حال، قبل از تنظیم به مقدار متغیر محلی Money دسترسی پیدا کردیم، بنابراین یک UnboundLocalError نتیجه آن است. لغو نظر بیانیه جهانی مشکل را برطرف می کند.
1 2 3 4 5 6 7 8 9 10 11 |
#!/usr/bin/python3 Money = 2000 def AddMoney(): # Uncomment the following line to fix the code: # global Money Money = Money + 1 print (Money) AddMoney() print (Money) |
تابع ()dir
تابع ()dir یک لیست مرتب شده از رشته ها حاوی نام های تعریف شده توسط یک ماژول را برمی گرداند.
لیست شامل نام تمام ماژول ها، متغیرها و توابعی است که در یک ماژول تعریف شده اند. در زیر یک مثال ساده آمده است –
1 2 3 4 5 6 7 |
#!/usr/bin/python3 # Import built-in module math import math content = dir(math) print (content) |
هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –
1 2 3 4 5 |
['__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'] |
در اینجا، متغیر رشته خاص __name__ نام ماژول است، و __file__ نام فایلی است که ماژول از آن بارگذاری شده است.
توابع ()globals و ()locals
توابع ()globals و ()locals را می توان برای برگرداندن نام ها در فضای نام جهانی و محلی بسته به مکانی که از آنجا فراخوانی می شوند استفاده کرد.
- اگر ()locals از داخل یک تابع فراخوانی شود، تمام نام هایی را که می توان به صورت محلی از آن تابع به آن دسترسی داشت، برمی گرداند.
- اگر ()globals از داخل یک تابع فراخوانی شود، تمام نام هایی را که می توان به صورت سراسری از آن تابع به آن دسترسی داشت، برمی گرداند.
نوع برگشتی هر دو این توابع دیکشنری است. بنابراین، نام ها را می توان با استفاده از تابع keys() استخراج کرد.
تابع ()reload
هنگامی که یک ماژول به یک اسکریپت وارد می شود، کد موجود در بخش سطح بالای یک ماژول فقط یک بار اجرا می شود.
بنابراین، اگر می خواهید کد سطح بالای یک ماژول را دوباره اجرا کنید، می توانید از تابع ()reload استفاده کنید. تابع ()reload یک ماژول وارد شده قبلی را دوباره وارد می کند. نحو تابع ()reload این است –
1 |
reload(module_name) |
در اینجا module_name نام ماژولی است که میخواهید دوباره بارگیری کنید و نه رشتهای که نام ماژول را در بر میگیرد. به عنوان مثال، برای بارگیری مجدد ماژول hello، موارد زیر را انجام دهید –
1 |
reload(hello) |
پکیج ها در پایتون
پکیج یک ساختار دایرکتوری فایل سلسله مراتبی است که یک محیط برنامه کاربردی پایتون را تعریف می کند که متشکل از ماژول ها و بسته های فرعی و زیر بسته ها و غیره است.
فایل Pots.py را در دایرکتوری تلفن در نظر بگیرید. این فایل دارای خط کد منبع زیر است –
1 2 3 4 |
#!/usr/bin/python3 def Pots(): print ("I'm Pots Phone") |
به همین ترتیب، ما دو فایل دیگر با عملکردهای متفاوت با همان نام فوق داریم. آنها هستند –
- فایل Phone/Isdn.py دارای تابع ()Isdn
- فایل Phone/G3.py با عملکرد ()G3
اکنون، یک فایل دیگر __init__.py در فهرست تلفن ایجاد کنید
- Phone/__init__.py
برای در دسترس قرار دادن تمام توابع خود در هنگام وارد کردن تلفن، باید عبارات واردات صریح را در __init__.py به صورت زیر قرار دهید –
1 2 3 |
from Pots import Pots from Isdn import Isdn from G3 import G3 |
پس از اینکه این خطوط را به __init__.py اضافه کردید، هنگام وارد کردن بسته تلفن، همه این کلاسها را در دسترس خواهید داشت.
1 2 3 4 5 6 7 8 |
#!/usr/bin/python3 # Now import your Phone Package. import Phone Phone.Pots() Phone.Isdn() Phone.G3() |
هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –
1 2 3 |
I'm Pots Phone I'm 3G Phone I'm ISDN Phone |
در مثال بالا، ما از یک تابع در هر فایل مثال زدیم، اما شما می توانید چندین تابع را در فایل های خود نگه دارید. همچنین می توانید کلاس های مختلف پایتون را در آن فایل ها تعریف کنید و سپس می توانید بسته های خود را از آن کلاس ها ایجاد کنید.
لیست جلسات قبل آموزش برنامه نوبسی پایتون 3
- آموزش برنامه نویسی پایتون 3
- آموزش موارد جدید در برنامه نویسی پایتون 3
- آموزش مرور کلی برنامه نویسی پایتون 3
- آموزش راه اندازی محیط برنامه نویسی پایتون 3
- آموزش نحو در برنامه نویسی پایتون 3
- آموزش انواع متغیرها در برنامه نویسی پایتون 3
- آموزش عملگرهای پایه در برنامه نویسی پایتون 3
- آموزش تصمیم گیری در برنامه نویسی پایتون 3
- آموزش حلقه ها در برنامه نویسی پایتون 3
- آموزش اعداد در برنامه نویسی پایتون 3
- آموزش رشته ها در برنامه نویسی پایتون 3
- آموزش لیست ها در برنامه نویسی پایتون 3
- آموزش تاپل ها در برنامه نویسی پایتون 3
- آموزش دیکشنری در برنامه نویسی پایتون 3
- آموزش تاریخ و زمان در برنامه نویسی پایتون 3
- آموزش توابع در برنامه نویسی پایتون 3
دیدگاه شما