module ها در برنامه نویسی Python
ماژول ها در پایتون (module)
def print_func( par ):
print “Hello : “, par
return
بهترین آموزشگاه پایتون در اصفهان در زمینه برگزاری دوره آموزشی زبان برنامه نویسی Python معرفی می گردد اینجا کلیک کنید
دستور import
می توان با استفاده از دستور import، یک source file پایتون را در source file دیگری مورد استفاده قرار داد. نحوه ی استفاده از دستور import به ترتیب زیر می باشد:
import module1[, module2[,… moduleN]
#!/usr/bin/python
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func(“Zara”)
خروجی:
Hello : Zara
یک ماژول، صرف نظر اینکه چندبار وارد (import) می شود، فقط یکبار بارگذاری می گردد. در صورت وجود چندین نمونه از دستور import، این امر مانع از این می شود که ماژول بارها و بارها اجرا شود.
The from…import Statement
from modname import name1[, name2[, … nameN]]
from fib import fibonacci
دستور from…import *
همچنین می توان تمامی اسم ها را از یک ماژول، وارد فضای نامی جاری کرد. این کار با استفاده از دستور زیر امکان پذیر می باشد:
from modname import *
دستور یاد شده، روشی آسان برای وارد کردن تمامی آیتم های مورد نظر از یک ماژول در فضای نام جاری می باشد. با این حال توصیه می شود از این دستور فقط مواقع ضروری استفاده کنید.
مکان یابی ماژول
به هنگام وارد کردن یک ماژول، مفسر زبان پایتون به ترتیب شرح داده شده در زیر به دنبال ماژول مورد نظر می گردد.
- پوشه ی جاری.
- در صورت نیافتن ماژول، پایتون هر پوشه (directory) را در shell variableکه PYTHONPATH نام دارد جستجو می کند.
- در صورت موفق نبودن دو روش ذکر شده، پایتون مسیر پیش فرض را سرچ می کند. در محیط UNIX، این مسیر پیش فرض /usr/local/lib/python/ می باشد.
set PYTHONPATH=c:\python20\lib;
set PYTHONPATH=/usr/local/lib/python
فضای نامی و تعیین حوزه ی دسترسی
#!/usr/bin/python
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money
تابع dir()
تابع توکار dir() لیست مرتب سازی شده ای برمی گرداند که حاوی رشته های متعدد می باشد. این رشته ها دربردارنده ی اسم ماژول ها می باشد.
لیستی که این تابع بازمی گرداند، دربردارنده ی ماژول ها، متغیرها و توابع می باشد که در ماژول تعریف شده اند. مثال:
#!/usr/bin/python
# Import built-in module math
import math
content = dir(math)
print content
نتیجه:
[‘__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’]
The globals() and locals() Functions −
reload(module_name)
reload(hello)
پکیج ها در پایتون
#!/usr/bin/python
def Pots():
print “I’m Pots Phone”
به طور مشابه، دو فایل دیگر داریم که با همان اسم دربردارنده ی توابع متفاوتی هستند.
- فایل Phone/Isdn.py حاوی تابع Isdn()
- فایل Phone/G3.py دربردارنده ی تابع G3()
حال یک فایل __init__.py دیگر در پوشه ی Phone ایجاد کنید:
Phone/__init__.py
برای اینکه بتوانید پس از import کردن Phone، تمامی توابع خود را در آماده ی استفاده داشته باشید، بایستی دستور صریح import را در __init__.py به صورت زیر قرار دهید:
from Pots import Pots
from Isdn import Isdn
from G3 import G3
بعد از اینکه خطوط فوق را به فایل __init__.py، اضافه کردید، با وارد کردن پکیج Phone، تمامی این کلاس ها در دسترس خواهند بود.
#!/usr/bin/python
# Now import your Phone Package.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()
نتیجه:
I’m Pots Phone
I’m 3G Phonماژول های پایتون فایل های .py هستند که از کد پایتون تشکیل شده اند. هر فایل پایتون را می توان به عنوان ماژول ارجاع داد.
آموزش پایتون در اصفهان از طریق نوشتن ماژول های پایتون برای استفاده در سایر فایل های برنامه نویسی راهنمایی می کند.
نوشتن و وارد کردن(import) ماژول ها در پایتون
نوشتن ماژول مانند نوشتن سایر فایل های پایتون است. ماژول ها می توانند شامل تعاریف توابع ، کلاس ها و متغیرهایی باشند که می توانند در سایر برنامه های پایتون مورد استفاده قرار گیرند.
از محیط برنامه نویسی Python 3، بیایید با ایجاد یک فایل hello.py شروع کنیم که بعداً به یک فایل دیگر وارد می کنیم.
# hello.py
# Define a function
def world():
print(“Hello, World!”)
اگر برنامه را روی خط فرمان با python hello.py اجرا کنیم ، هیچ اتفاقی نمی افتد ، زیرا به برنامه نگفته ایم که کاری انجام دهد.
# main_program.py
# Import hello module
import hello
# Call function
hello.world()
از آنجا که ما یک ماژول را وارد می کنیم ، باید با ارجاع نام ماژول در نماد نقطه تابع را فراخوانی کنیم. در عوض ما می توانیم ماژول را با from hello import world وارد کنیم و عملکرد را مستقیماً به عنوان world () فراخوانی کنیم.
اکنون می توانیم برنامه را در خط فرمان اجرا کنیم:
$ python main_program.py
وقتی این کار را انجام می دهیم ، خروجی زیر را دریافت می کنیم:
Hello, World!
برای مشاهده نحوه استفاده از متغیرها در یک ماژول ، بیایید یک تعریف متغیر در فایل hello.py خود اضافه کنیم:
# hello.py
# Define a function
def world():
print(“Hello, World!”)
# Define a variable
shark = “Sammy”
# main_program.py
# Import hello module
import hello
# Call function
hello.world()
# Print variable
print(hello.shark)
پس از اجرای مجدد برنامه ، خروجی زیر را دریافت می کنیم:
Hello, World!
Sammy
در نهایت ، بیایید یک کلاس در فایل hello.py نیز تعریف کنیم. ما کلاس Octopus را با ویژگی های نام و رنگ و یک تابع ایجاد می کنیم که هنگام فراخوانی ویژگی ها را چاپ می کند.
# hello.py
# Define a function
def world():
print(“Hello, World!”)
# Define a variable
shark = “Sammy”
# Define a class
class Octopus:
def __init__(self, name, color):
self.color = color
self.name = name
def tell_me_about_the_octopus(self):
print(“This octopus is ” + self.color + “.”)
print(self.name + ” is the octopus’s name.”)
# main_program.py
# Import hello module
import hello
# Call function
hello.world()
# Print variable
print(hello.shark)
# Call class
jesse = hello.Octopus(“Jesse”, “orange”)
jesse.tell_me_about_the_octopus()
وقتی برنامه را اجرا می کنیم ، خروجی زیر را دریافت می کنیم:
Hello, World!
Sammy
This octopus is orange.
Jesse is the octopus’s name.
مهم است که به خاطر داشته باشید که اگرچه ماژول ها اغلب تعریف هستند ، اما می توانند کد را نیز پیاده سازی کنند. برای مشاهده نحوه عملکرد ، اجازه دهید فایل hello.py خود را بازنویسی کنیم تا عملکرد world () را پیاده سازی کند:
# hello.py
# Define a function
def world():
print(“Hello, World!”)
# Call function within module
world()
ما سایر تعاریف موجود در ماژول را نیز حذف کرده ایم.
# Import hello module
import hello
Hello, World!
ماژول یک فایل برنامه پایتون است که از تعاریف یا کدی تشکیل شده است که می توانید از آن در سایر فایل های برنامه پایتون استفاده کنید.
دسترسی به ماژول ها از دایرکتوری دیگر
ماژول ها ممکن است برای بیش از یک پروژه برنامه نویسی مفید باشند ، و در این صورت نگه داشتن یک ماژول در یک دایرکتوری خاص که به یک پروژه خاص مرتبط است ، منطقی به نظر نمی رسد.
اگر می خواهید از ماژول پایتون در مکانی غیر از همان دایرکتوری که برنامه اصلی شما در آن است استفاده کنید ، چند گزینه دارید.
اضافه کردن مسیرها
یکی از گزینه ها فراخوانی مسیر ماژول از طریق فایل های برنامه نویسی است که از آن ماژول استفاده می کنند. این باید بیشتر به عنوان یک راه حل موقت در نظر گرفته شود که می تواند در طول فرایند توسعه انجام شود زیرا ماژول را در سراسر سیستم در دسترس قرار نمی دهد.
برای افزودن مسیر یک ماژول به یک فایل برنامه نویسی دیگر ، ابتدا با وارد کردن ماژول sys در کنار سایر ماژول هایی که می خواهید در فایل اصلی برنامه خود استفاده کنید ، وارد کنید.
اگر با ماژول sys آشنا نیستید، پیشنهاد میکنیم را ببینید.
ماژول sys بخشی از کتابخانه استاندارد پایتون است و پارامترها و عملکردهای خاص سیستم را ارائه می دهد که می توانید در برنامه خود از آنها برای تعیین مسیر ماژول مورد نظر خود استفاده کنید.
import sys
sys.path.append(‘/usr/sammy/’)
import hello
ثبت نام در کلاس پایتون در جهاد دانشگاهی با بیش از بیست ساعت کلاس برگزاری می کند
اضافه کردن ماژول به مسیر پایتون
گزینه دوم این است که ماژول را به مسیری که پایتون ماژول ها و بسته ها را بررسی می کند اضافه کنید. این یک راه حل دائمی است که ماژول را در سراسر محیط یا در سراسر سیستم در دسترس قرار می دهد و این روش را قابل حمل تر می کند.
برای اینکه بدانید پایتون چه مسیری را بررسی می کند ، مترجم پایتون را از محیط برنامه نویسی خود اجرا کنید:
$ python3
بعد ، ماژول sys را وارد کنید:
>>> import sys
سپس از پایتون بخواهید مسیر سیستم را چاپ کند:
>>> print(sys.path)
در اینجا ، خروجی با حداقل یک مسیر سیستم دریافت خواهید کرد. اگر در محیط برنامه نویسی هستید، ممکن است چندین مورد دریافت کنید. شما می خواهید محیطی را که در حال حاضر از آن استفاده می کنید جستجو کنید ، اما ممکن است بخواهید ماژول را به مسیر اصلی سیستم پایتون خود اضافه کنید. آنچه شما به دنبال آن هستید مشابه این خواهد بود:
‘/usr/sammy/my_env/lib/python3.5/site-packages’
اکنون می توانید فایل hello.py خود را به آن پوشه منتقل کنید. پس از اتمام کار ، می توانید ماژول hello را به طور معمول وارد کنید:
import hello
…
وقتی برنامه خود را اجرا می کنید ، باید بدون خطا کامل شود.
تغییر مسیر ماژول شما می تواند اطمینان حاصل کند که می توانید بدون درنظر گرفتن اینکه در چه پوشه ای هستید به ماژول دسترسی پیدا کنید. این امر به خصوص در صورتی مفید است که بیش از یک پروژه به یک ماژول خاص وقتی در حال پیاده سازی یک پروژه واقعی و متوسط یا بزرگ باشیم، کدهای زیادی در برنامه ما وجود دارد. ماژول ها در پایتون به ما کمک می کنند تا این کدها را سازمان دهی کنیم. هر ماژول یک فایل python است که کدهایی دارند. با وارد کردن این ها می توانیم از کدهای آن در فایل دیگر استفاده کنیم.
فرض کنید برای یک پروژه، بخش ورود کاربران را نوشته ایم. حالا می خواهیم برای پروژه دیگر، دقیقاً مشابه همین سیستم را پیاده کنیم. یعنی باید کدها و توابع مشابهی را بنویسیم!
اولین راه حلی که به ذهنمان می رسد این است که کدهای قبلی را کپی و در فایل جدید استفاده کنیم. نمی گویم این روش بد است! اما و کمی سخت می شود.
به کمک ماژول ها در پایتون علاوه بر اینکه می توانیم کدهایمان را سازمان دهی کنیم، می توانیم از بعضی کدهای پرکاربرد در چند پروژه استفاده کنیم. منظورم از سامان دهی، نوشتن کدهای برنامه در فایل های جداگانه و استفاده از این فایل ها در یکدیگر است.
در این آموزش ابتدا یاد می گیریم چطور یک ماژول در پایتون ایجاد کنیم. سپس نحوه فراخوانی و استفاده از ماژول ها را یاد می گیریم. در انتها بحث های تکمیلی نظیر اینکه moduleها را در کجا استفاده کنیم بحث می کنیم.
ساخت ماژول پایتون
تا این جلسه از کدهایمان را در یک فایل با فرمت .py می نوشتیم. این فایل را بنا به نیازمان با 4 روشی که برای یاد گرفتیم، در خط فرمان یا IDEها اجرا می کنیم.
هر فایل .py یک ماژول در پایتون است! یعنی می توانیم کدهای آن را در یک فایل دیگر فراخوانی و استفاده کنیم. فرض کنید تابع greetings() را برای چاپ یک پیام ساده در فایل myprint.py نوشته ایم:
def greetings(name):
print(f”Hello {name}, Welcome to SabdDanesh!”)
الآن یک ماژول به نام myprint داریم که می توانیم از آن در فایل های دیگر استفاده کنیم. 🙂
قبل از اینکه از ماژول استفاده کنیم، بهتر است بدانیم چه نوع کدهایی در ماژول پایتون قرار می گیرد؟ تقریباً هر نوع کدی می توانیم در moduleها قرار دهیم!
- که خودمان تعریف کرده ایم.
- متغیرهای مختلف نظیر ، یا
- حتی کدهایی در اسکوپ اصلی ماژول! (البته کدهای اجرایی در ماژول ممکن است مشکلاتی برایمان ایجاد کند که در بخش انتهایی مرور می کنیم.)
وارد کردن module پایتون
کدهای این ماژول را در فایل فعلی کپی کن! چون می خواهیم از آن ها استفاده کنیم.
برای استفاده از ماژول از دستور import در پایتون استفاده می کنیم. این دستور را می توانیم در 3 ساختار مختلف به کار ببریم که در ادامه آن ها را یاد می گیریم.
دستور import ماژول در پایتون
ساختار کلی این دستور مشابه زیر است:
import module1 [,module2 [,module3 …]]
import myprint
اگر خواستیم چند ماژول را همزمان ایمپورت کنیم، از کاما (,) بین اسم ها استفاده می کنیم. مثلاً در دستور زیر، علاوه بر ماژول خودمان، 2 ماژول محاسبات ریاضی و توابع رندوم پایتون را فراخوانی کرده ام:
import myprint, math, random
import myprint
myprint.greetings(“omid”)
مثلاً برای تولید یک عدد رندوم بین 0 تا 20 می توانیم مشابه زیر عمل کنیم:
import random
rnd = random.randint(0, 20)
دستور from import
فایلی به نام utils.py با کدهای زیر ایجاد می کنم. اگر هنوز نمی دانید کلاس در پایتون چیست، نگران نباشید، فقط می خواهم فراخوانی آن ها را در ماژول های پایتون بررسی کنیم. در جلسات بعدی با این مفهوم آشنا خواهیم شد.
# utils.py
def calc(x):
return (x**2)*(x+1)
class Person():
def __init__(self, name):
self.name = name
users = [‘ghazal’, ‘ehsan’, ‘omid’]
# app.py
import utils
print( utils.calc(5) )
p1 = utils.Person(‘farinaz’)
utils.users.append(‘negar’)
برای اینکه فقط یک یا چند مورد را از ماژول فراخوانی کنیم، از ساختار from … import … استفاده می شود.
# import single thing from madule
from utils import calc
# import multiple things
from utils import calc, users
به همین سادگی! 🙂
در این حالت، وقتی بخواهیم تابع یا متغیر را صدا بزنیم، نیازی به نوشتن نام ماژول در ابتدای آن ها نیست. یعنی من می توانم مشابه زیر از تابع و لیستی که ایمپورت شد استفاده کنم:
from utils import calc, users
print( calc(5) )
اگر بخواهیم همه توابع و متغیرهای موجود در ماژول را به این روش صدا بزنیم، از علامت ستاره (*) به جای نام بردن از همه توابع استفاده می شود:
from utils import *
به این شکل، تمام ماژول در کد وارد می شود و برای استفاده از توابع نیازی به نوشتن نام module نداریم.
ایمپورت با تغییر نام در پایتون
گاهی نیاز داریم نام یک ماژول یا چیزهایی که از آن ایمپورت کرده ایم را تغییر دهیم. این مسئله می تواند دو دلیل کلی داشته باشد:
- بخواهیم نامش را خلاصه کنیم یا با نام دلخواه فراخوانی کنیم.
- این ماژول یا توابع آن با کدهای ما هم نام باشد.
import random as rnd
rnd.randint(0, 20)
این کار را می توانیم برای توابعی که import می شوند نیز استفاده کنیم؛ مثل کد زیر:
from utils import calc as calculate
print( calculate(5) )
پیشرفته: ماژول های پایتون
در ابتدای آموزش به طور مختصر موارد استفاده از ماژول ها را با شما مرور کردم. شخصاً 4 کاربرد کلی برای ماژول ها در پایتون در نظر می گیرم:
- سازماندهی کدها با تبدیل مجموعه ای از توابع مرتبط به هم به یک ماژول
- امکان استفاده مجدد از برخی کدها (و ماژولار شدن برنامه ما)
- به کمک ماژول بندی می توانیم از کدهای دیگران (یا کدهای قبلی خودمان) استفاده کنیم.
- می توانیم این ماژول ها را منتشر کرده یا در اختیار دیگران قرار دهیم.
در جلسه بعدی یاد می گیریم چطور به دنیایی از ماژول هایی که توسط دیگران توسعه داده شده دسترسی پیدا کرده و از آن ها استفاده کنیم. مثلاً به کمک همین ماژول ها، بدون نیاز به کدنویسی پیچیده، با کار می کنیم!
مسیر جستجوی ماژول های python
وقتی دستور import استفاده می شود، مفسر پایتون چند مسیر را بررسی می کند تا ماژول مورد نظرمان را فراخوانی کند. ابتدا در لیست ماژول های built-in که با وجود دارند جستجو کرده و اگر چیزی پیدا نشد در سایر مسیرها دنبال ماژول مورد نظر می گردد.
به طور کلی به ترتیب مسیرهای زیر بررسی می شوند:
- ماژول های توکار (Built-in)
- فولدر فعلی
- فولدرهایی که در متغیر محلی PYTHONPATH سیستم عامل هستند. (همانی که در تعریف می شود.)
- چند فولدر در مسیر نصب پایتون
تابع dir برای بررسی ماژول
تابع dir() ماژولی که import کردیم را به عنوان ورودی می گیرد و لیستی از توابع و متغیرهای درون آن را به ما می دهد. معمولاً از این تابع برای بررسی ماژول یا کارهای مربوط به استفاده می شود.
import utils
print( dir(utils) )
# output:
# [‘Person’, ‘__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘calc’, ‘users’]
امیدوارم الآن بتوانید یک ماژول برای خودتان ایجاد کنید، آن را وارد فایل دیگری کرده و از ماژول های دیگران استفاده کنید. همین الآن سعی کنید دو فایل ساده شبیه به فایل های آموزش ایجاد و کمی تمرین کنید.
اگر سؤال یا نظری دارید از بخش دیدگاه ها مطرح کنید وگرنه همین الآن به جلسه بعدی بروید تا یاد بگیرید چطور ماژول های بیشتری را نصب کنید. 🙂
این آموزش برای همیشه رایگانه! می تونید با اشتراک گذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
اشاره داشته باشد.
e
I’m ISDN Phone