Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages

קורס Python – פרק 15 – מודולים Modules

מודול מאפשר לנו לארגן את הקוד שלנו בצורה מסודרת. ארגון בלוקים של קוד בקבוצה אחת עוזר לנו להבין ולקרוא את הקוד

מודול הוא אובייקט Python בעל תכונות שניתן להשתמש בהם או להתייחס אליהם. בפשטות – מודול הוא קובץ המכיל קוד Pyhton. מודול מכיל בדרך כלל פונקציות, משתנים, מחלקות ולעתים אף קוד להרצה.

ייבוא מודול Import Module

ניתן לייבא מודולים בשפת Python 3 על ידי שימוש במילת המפתח import, כאשר זהו התחביר הנכון לעשות כך:


import module1[, module2[,... moduleN]

כאשר המקשר נתקל במשפט import, הוא מייבא את המודול לתוך התוכנית, כל עוד היא אכן נמצאת בנתיב החיפוש. צרו קובץ Python חדש בשם support.py והזינו לתוכו את קטע הקוד הבא:


def print_func( par ):
   print "Hello : ", par
   return

לאחר מכן צרו קובץ חדש באיזה שם שתבחרו, שבו נייבא את המודול support שהרגע יצרנו:


import support

support.print_func("Joe")

Hello : Joe

מודול נטען לתוכנית רק פעם אחת, כך שגם אם נבצע לו 10 פעולות import, הוא עדיין יטען לתוכנית רק פעם אחת, אך מצד שני נוכל להשתמש בו במהלך התוכנית כמה פעמים שרק נרצה, כל עוד טענו אותו בתחילת התוכנית.

from…import

הביטוי from מאפשר לנו לייבא תכונות מסוימות מתוך מודול קיים:


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 modname import *

שימוש במודולים כסקריפטים Scripts

בתוך מודול, שם המודול זמין כערך (מחרוזת) למשתנה הגלובלי __name__. הקוד במודול יצא לפועל כאילו ייבאנו אותו, רק ש-__name__ ישתנה ל-__main__:


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)

ולכן נקבל את התוצאה הבא:

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

איתור מודולים

כאשר אנו מייבאים מודול, המקשר יחפש את המודול לפי הסדר הבא:

  • התיקייה הנוכחית
  • הנתיב שהגדרנו במשתנה PYTHONPATH
  • אם המודול לא נמצא בשני המיקומים האחרונים, Python תבדוק בתיקיית הברירת מחדל שלה.

המשתנה PYTHONPATH

PYTHONPATH הוא משתנה סביבת תכנות, התחביר של PYTHONPATH הוא בדיוק כשל משתנה הסביבה PATH. על מנת לקבוע משתנה PYTHONPATH בווינדוס, יש להפעיל את שורת הפקודה ולהין את הפקודה הבאה:


set PYTHONPATH = c:\python34\lib\

ובמערכות מבוססות יוניקס:


set PYTHONPATH = /usr/local/lib/python

הפונקציה ()dir

הפונקציה המובנת ()dir מחזירה לנו רשימה מאורגנת של המחרוזות שמכילות את השמות שהוגדרו על ידי מודול. הרשימה מכילה את שמות כל המשתנים, הפונקציות והמודולים שהוגדרו במודול מסוים. לדוגמה:


import math

content = dir(math)
print (content)

'__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign]
', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isf
inite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 't
[anh', 'trunc'

המשתנה המיוחד  __name__  הוא שם המודול והמשתנה המיוחד __file__ הוא שם הקובץ שמתוכו נטען המודול.

הפונקציות ()global ו-()local

פונקציות אלו מחזירות את השמות אשר מכילות הפונקציות הגלובליות, או המקומיות.

  • אם נשתמש בפונקציה ()global נקבל את כל השמות שבתוך הפונקציות הגלובליות
  • אם נשתמש בפונקציה ()local נקבל את כל השמות שבתוך הפונקציות המקומיות

סוג הרשימה שהפונקציה תחזיר הוא מילון Dictionary ולכן נשתמש בפונקציה ()keys כדי להוציא מתוכה את השמות.

הפונקציה ()reload

כאשר אנו מייבאים מודול, המקשר מבצע את הקוד שבתוכו פעם אחת. אם אנו מעוניינים שהמקשר יריץ את הקוד שבמודול פעם נוספת עלינו לטעון את המודול מחדש על ידי שימוש בפונקציה ()reload לפי התחביר הבא:


reload(module_name)

חבילות Packages

חבילה Package בשפת Python היא אוסף של קבצים אשר מאורגנים בצורה היררכית בתיקייה, והם למעשה אוסף של מודולים, תת-חבילות, תת-תת-חבילות וכן הלאה.

נניח שיש לנו תיקייה בשם phone אשר יש בתוכה קובץ בשם Dans.py שמכיל את מקטע הקוד הבא:


def Dans():
print ("I'm Dan's Phone")

כמו כן נניח שיש לנו שני קבצים שמכילים פונקציות שונות שנושאות את אותו השם כמו הקובץ:

  • Phone/Isdn.py – קובץ זה מכיל פונקציה בשם ()Isdn
  • Phone/G5.py – קובץ זה מכיל פונקציה בשם ()G5

כעת ניצור קובץ בתיקייה phone אשר נושא את השם init__.py__ , ונזין בתוכו את קטע הקוד הבא שיהפוך פונקציות אלו לזמינות:


from Pots import Dans
from Isdn import Isdn
from G3 import G3

כעת נוכל לקרוא לחבילה phone:


# Now import your Phone Package.
import Phone

Phone.Dans()
Phone.Isdn()
Phone.G5()

I'm Dans Phone
I'm 5G Phone
I'm ISDN Phone

רוצים לשתף את המדריך?

שיתוף ב facebook
שיתוף ב twitter
שיתוף ב telegram
שיתוף ב whatsapp
שיתוף ב linkedin
שיתוף ב tumblr
שיתוף ב email
שיתוף ב reddit
שיתוף ב skype
שיתוף ב vk

אהבתכם את המדריך? פתר לכם תקלה?

גולשים יקרים, רוב התכנים המוצגים באתר נכתבים בהתנדבות מלאה מתוך כוונה להנגיש מידע עבורכם. אם נתקלתם במדריך חינמי שפתר לכם תקלה או לימד אתכם משהו חדש שלא ידעתם, וברצונכם לתגמל את כותב המדריך או סתם להזמין אותו לכוס קפה, הינכם יותר ממוזמנים לתרום.

כתיבת תגובה