מירי
כיתה ח · תכנות בפייתון

פונקציות בפייתון כותבים פעם אחת, משתמשים הרבה

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

1

הרעיון

פונקציה היא כמו מכונה: מכניסים לה ערכים, היא עובדת, ומוציאה תוצאה.

def area(width, height):
    result = width * height
    return result

print(area(4, 3))

def ופרמטרים

def מגדיר פונקציה. בסוגריים יש פרמטרים: שמות לערכים שהפונקציה מקבלת. הגוף מוזז פנימה, ולא רץ עד שקוראים לפונקציה.

קריאה לפונקציה

area(4, 3) קורא לפונקציה. 4 נכנס ל-width ו-3 נכנס ל-height, לפי הסדר. אפשר לקרוא שוב עם ערכים אחרים.

return מחזיר

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

לזכור: print רק מראה על המסך. return מחזיר ערך שאפשר להשתמש בו. פונקציה בלי return מחזירה None.
2

מעבדה: קופצים לתוך הפונקציה וחוזרים

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

נסו את אלה:

הריצו בעצמכם

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

3

טעויות שכולם עושים

print במקום return

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

✗ מחזיר None

def double(n):
    print(n * 2)

✓ מחזיר ערך

def double(n):
    return n * 2

הגדרה בלי קריאה

def רק מגדיר. בלי קריאה עם סוגריים, הגוף לא רץ אף פעם.

✗ לא קורה כלום

def hello():
    print("Hi")

✓ קוראים לה

def hello():
    print("Hi")

hello()

קוראים לפני שמגדירים

פייתון קוראת מלמעלה למטה. קריאה לפני ה-def נותנת NameError.

✗ NameError

print(square(5))
def square(n):
    return n * n

✓ קודם def

def square(n):
    return n * n
print(square(5))

משתנה מקומי בחוץ

משתנה שנוצר בתוך פונקציה נמחק כשהיא נגמרת. בחוץ משתמשים במה שהיא מחזירה.

✗ NameError

def total(a, b):
    s = a + b
    return s
total(2, 3)
print(s)

✓ שומרים את ההחזרה

def total(a, b):
    s = a + b
    return s
answer = total(2, 3)
print(answer)
4

דוגמה פתורה: מחיר כרטיס

בקולנוע כרטיס לילד עד גיל 12 עולה 20, ולכל השאר 35. הפונקציה ticket מחזירה את המחיר לפי הגיל. שימו לב: return מסיים את הפונקציה מיד, ולכן השורה שאחריו לא רצה.

5

תרגול


  

6

שאלות שכולם שואלים

מה ההבדל בין return ל-print בפונקציה?

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

מה ההבדל בין פרמטר לארגומנט?

פרמטר הוא השם שבתוך ה-def, למשל width. ארגומנט הוא הערך ששולחים בקריאה, למשל 4. בכל קריאה הפרמטר מקבל את הארגומנט שנשלח באותו מקום בסדר.

למה כדאי לכתוב פונקציות?

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