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 *

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

مکان یابی ماژول

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

  1. پوشه ی جاری.
  2. در صورت نیافتن ماژول، پایتون هر پوشه (directory) را در shell variableکه PYTHONPATH نام دارد جستجو می کند.
  3. در صورت موفق نبودن دو روش ذکر شده، پایتون مسیر پیش فرض را سرچ می کند. در محیط 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”

به طور مشابه، دو فایل دیگر داریم که با همان اسم دربردارنده ی توابع متفاوتی هستند.

  1. فایل Phone/Isdn.py حاوی تابع Isdn()
  2. فایل 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 کاربرد کلی برای ماژول ها در پایتون در نظر می گیرم:

  1. سازماندهی کدها با تبدیل مجموعه ای از توابع مرتبط به هم به یک ماژول
  2. امکان استفاده مجدد از برخی کدها (و ماژولار شدن برنامه ما)
  3. به کمک ماژول بندی می توانیم از کدهای دیگران (یا کدهای قبلی خودمان) استفاده کنیم.
  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

 

دکمه بازگشت به بالا