איך לכתוב פונקציות בפייתון?

מחבר:
בתאריך:

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

פונקציות משמשות בכל מקום בפייתון.

לדוגמה:

  • פונקציה ששולחת מיילים.
  • פונקציה שמחשבת את התאריך היום.
  • פונקציה שממירה קבצים מפורמט אחד לשני דוגמת תמונה מ-png ל-jpg.
  • פונקציה שמוודאת את תקינות המידע שמשתמשים מזינים לטופס.
  • ועוד..

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

מדריך פונקציות של פייתון - כיצד לכתוב פונקציות של פייתון

 

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

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

קוד הפונקציה נכתב בבלוק שמתחת לשם הפונקציה הכולל הזחה ימינה.

כך נראה תחביר הפונקציה בפייתון:

def func_name():
    # do something

לדוגמה, הפונקציה הבאה ששמה say_hello מדפיסה את המחרוזת "hello" למסך:

def say_hello():
  print('hello')
  • שם הפונקציה יכול להכיל אותיות אנגליות, ספרות וקו תחתון.
  • האות הראשונה בשם הפונקציה יכולה להיות אות או קו תחתון.
  • כאשר שם הפונקציה מורכב משתי מילים או יותר נפריד ביניהם באמצעות קו תחתון.

כשנריץ את הקוד נראה שהפונקציה לא עושה שום דבר. למה? כי לא קראנו לה.

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

say_hello()
  • שימו לב, כדי שהפונקציה תרוץ, כשקוראים לפונקציה חובה להוסיף את הסוגריים העגולים.

כך נראה הקוד המלא שכתבנו עד כה, הכולל את הפונקציה ואת הקריאה לפונקציה:

def say_hello():
 print('hello')

say_hello()
hello

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

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

 

פונקציה הכוללת פרמטר וקריאה לפונקציה עם ארגומנט

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

נוסיף לפונקציה את הפרמטר name, שיקבל את שמו של האדם אותו רוצים לברך, מה שיאפשר לנו להציב אותו כמשתנה בתוך המחרוזת המועברת לפקודת ה-print:

def say_hello(name):
  print(f'hello {name}')
  • הגדרנו את שמו של הפרמטר בתוך הסוגריים העגולים.
  • הפונקציה משבצת את שמו של האדם לתוך מחרוזת ההודעה במסגרת של f-string, שעליו תוכלו ללמוד במדריך פעולות על מחרוזות בפייתון.

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

say_hello('Xaim')
  • כיוון שהערך 'Xaim' הוא משתנה מסוג מחרוזת נגדיר אותו בין מרכאות יחידות (גם מרכאות כפולות ישיגו את המטרה).

כך נראה הקוד המלא:

def say_hello(name):
  print(f'hello {name}')
 
say_hello('Xaim')

וזה מה שנקבל כשנריץ את הקוד:

hello Xaim

 בספרות, תוכלו לראות שנוהגים להבחין בין פרמטר לבין ארגומנט:

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

יש נטייה לבלבל בין המושגים, וגם אני לא תמיד מקפיד להבחין בין השניים.

 

פונקציות המכילות יותר מפרמטר אחד

עד כה ראינו דוגמה לפונקציה הכוללת פרמטר אחד, אבל פונקציות יכולות להכיל שני פרמטרים או יותר. בדוגמה הבאה, הפונקציה say_hello כוללת שני פרמטרים:

  • x המכיל את שמו של המברך.
  • y המכיל את שמו של מקבל הברכה.
def say_hello(x, y):
  print(f'{x} says hello to {y}')

נקרא לפונקציה כדי ש "חיים" יברך את "יעקב".

def say_hello(x, y):
  print(f'{x} says hello to {y}')
 
say_hello('xaim', 'yakov')

נריץ את הקוד, ונקבל את התוצאה הבאה:

xaim says hello to yakov

אבל מה יקרה אם נשכח לספק את אחד הארגומנטים?

say_hello('xaim')
TypeError: say_hello() missing 1 required positional argument: 'y'

הודעת השגיאה אומרת לנו שלא סיפקנו ארגומנט הכרחי (required argument).

 

פרמטרים רשות - פרמטרים שלא חייבים להעביר

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

בדוגמה הבאה, הערך ברירת המחדל של הפרמטר x הוא 'a' והערך ברירת המחדל של הפרמטר y הוא 'b':

def say_hello(x='a', y='b'):
  print(f'{x} says hello to {y}')

נקרא לפונקציה מבלי לספק את הארגומנטים:

say_hello()

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

a says hello to b
  • מכיוון שלא העברנו את הארגומנטים כשקראנו לפונקציה, היא השתמשה בערכים ברירת המחדל.

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

say_hello('Xaim', 'Yakov')

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

Xaim says hello to Yakov

ארגומנטים שלא חייבים להעביר כשקוראים לפונקציה הם רשות (optional), ולעומתם ארגומנטים שחייבים להעביר הם הכרח (required).

 

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

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

בדוגמה הבאה, הארגומנטים x ו-y הם הכרחיים ולכן נכתוב אותם לפני הארגומנטים רשות, greet ו-excl:

def greet(x, y, greet='welcomes', excl='!'):
  print(f'{x} {greet} {y}{excl}')
 
greet('Xaim', 'yakov')
Xaim welcomes yakov!

 

פונקציות של פייתון - קצת יותר לעומק

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

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

def convert_miles_to_kilometers(num):
  const = 1.60934
  return num * const

נריץ את הקוד לבדיקה:

miles = 3
km = convert_miles_to_kilometers(miles)
print(f'{miles} miles are {km} kilometers')

והתוצאה:

3 miles are 4.82802 kilometers

כדי להמיר ממיילים למטרים נוסיף פונקציה נוספת שממירה מק"מ למטרים:

def convert_kilometers_to_meters(num):
  const = 1000
  return num * const

כדי לחשב את מספר המטרים ב-3 מייל נשתמש ב-2 הפונקציות:

km2 = convert_miles_to_kilometers(miles)
m2 = convert_kilometers_to_meters(km2)
print(f'{miles} miles are {m2} meters')

והתוצאה:

3 miles are 4828.02 meters

ניתן לשלב את שתי הפונקציות באופן הבא:

m3 = convert_kilometers_to_meters(convert_miles_to_kilometers(miles))
print(f'{miles} miles are {m3} meters')

והתוצאה:

3 miles are 4828.02 meters

הפונקציה הפנימית ממירה מיילים לק"מ, ואז נכנסת לפעולה הפונקציה החיצונית וממירה את הק"מ למטרים.

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

לכל המדריכים בסדרה ללימוד פייתון

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 8 + 2