מודול מאפשר לנו לארגן את הקוד שלנו בצורה מסודרת. ארגון בלוקים של קוד בקבוצה אחת עוזר לנו להבין ולקרוא את הקוד
מודול הוא אובייקט 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