מודולים Modules



מודולים Modules

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

במידה ובתוכנית מופיע הפקודה

import name

תוכנת python תחפש קובץ בשם name.py ותכלול אותו במובן מסוים בתוכנית הנוכחית. מעתה יהיה אפשר לקרוא לפונקציה fun() מוגדרת ב-name.py ע"י

name.fun()

הפונקציה fun אינה מוכרת ישירות ע"י התוכנית הקוראת לו. זאת בכדי למנוע התנגשות אפשרית של שמות. ניתן לשנות זאת בשתי צורות. אפשר להציב למשתנה כלשהוא את הביטוי name.fun() למשל

f = name.fun()

ועכשיו לקרוא לו ע"י

f()

אפשר גם ליבא את ההגדרות ישירות ע"י הפקודה from למשל

from name import fun

אם רוצים ליבא את כל מה שיש ב-name אפשר לעשות זאת ע"י הפקודה

from name import *

הקוד של ה-מודויל יודע את שם הקובץ שלו כמחרוזת ע"י המשתנה __name__.

לדוגמא, התוכנית הקוראת לרוטינות שלfibom.py ולהדפיס אותו ע"י הפקודה

print fibom.__name__

יתקבל המחרוזת 'fibom'.

לדוגמא,

# runfibom1.py - run fibom.py module

from fibom import *

print fib(1000)

print fib2(1000)

import fibom

print fibom.__name__

פלט ריצה:

% python runfibom1.py

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 None

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]

fibom

%

כאשר מריצים תוכניות המבוססות על מודיולים נוצרים קובצי .pyc ו/או .pyo שהם קבצים בינאריים מקומפלים של תוכניות ה-.py קבצים אלו מקטינים במשהו את זמן הטעינה של קובצי מודיול. לא נכנס לזה מעבר לכך.

ניתן לקבל את את רשימת הסמלים המוגדר במודיול ע"י הפונקציה dir למשל:

>>> import fibom

>>> dir(fibom)

['__builtins__', '__doc__', '__file__', '__name__', 'fib', 'fib2']

>>>

כאשר יש פקודת import בתוכנית, תוכנת ה-python מחפשת את קובץ ה-.py המתאים קודם כל בספריה הנוכחית, אחר כך לפי משתנה הסביבה PYTHONPATH ולבסוף בספריה הסטנדרטית של התוכנה.

ניתן לדעת את המסלול הנוכחי (ואפילו להוסיף או לשנות אותו) באמצעות המודיול הסטנדרטי sys, לדוגמא:

>>> import sys

>>> print sys.path

['', '/usr/local/lib/python24.zip', '/usr/local/lib/python2.4', '/usr/local/lib/python2.4/plat-linux2', '/usr/local/lib/python2.4/lib-tk', '/usr/local/lib/python2.4/lib-dynload', '/usr/local/lib/python2.4/site-packages']

>>>

קבצים

קבצים נפתחים לקריאה או כתיבה ע"י הפקודה open. לדוגמא הפקודה

f = open('file1.txt', 'w')

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

r פתח קובץ לקריאה בלבד בהנחה שהוא קיים

r+ פתח קובץ לקריאה ולכתיבה בהנחה שהוא קיים

w פתח קובץ לכתיבה בלבד, מחק קובץ קיים אם יש

w+ פתח קובץ לכתיבה וקריאה, מחק קובץ קיים אם יש

a פתח קובץ להוספה לסוף הקובץ, תיצור קובץ חדש אם לא קיים

a+ אבל תומך גם בקריאה/כתיבה של תוכן קיים aכמו מוד

המודים הללו מתיחסים לפתיחת קובצי טקסט. במידה ומדובר בקבצים בינאריים יש להוסיף את התו 'b' למוד הקריאה. מוד קריאה הוא פרמטר אופציונלי ב-python. ברירת המחדל הוא המוד 'r'.

פונקציות החבר הבסיסיות של קבצים:

read(sizeint)

קרא sizeint תוים מהקובץ בתור מחרוזת (ברירת מחדל הכל)

readline()

קרא עד ל-'n\' הקרוב

readlines(sizeint)

קרא את השורות של הקובץ לתוך רשימה עד למקסימום של sizeint בתים (ברירת מחדל הכל).

write(str)

כתוב את המחרוזת str לקובץ.

seek(offset, from_what)

עבור לנקודה offset בקובץ יחסית או להתחלה (from_what = 0) או מהמיקום הנוכחי (from_what = 1), או מהסוף (from_what=2). ברירת מחדל ל- from_what הוא 0.

Open

פתח קובץ

close

סגור קובץ (מבטיח כתיבת אינפורמציה ומאפשר פתיחה במוד אחר).

לדוגמא,

# file.py

f = open('tmpfile', 'w+')

f.write('123456789abcdef')

f.seek(0,0)

print f.read(3)

print f.read(2)

f.seek(-3,2)

print f.read(2)

f.close()

פלט ריצה

% python file.py

123

45

de

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery

Related searches