תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

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

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

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

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

לדוגמה:

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

 

 

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

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

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

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך קוראים בעברית לצ`ופצ`יק של הקומקום?

 

תמונת המגיב

אנונימי בתאריך: 23.04.2021

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

תמונת המגיב

מיכל בתאריך: 14.03.2023

אתה תותח!! מסביר מציון

תמונת המגיב

דוד בתאריך: 30.05.2023

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

def f():
 return p * m
m = 1.60934
p = 3
k = f()
g = p / m
print(f'{p} maile = {k} km, and {p} km = {g} maile')
ומידה ואני רוצה לדעת כמה מטרים במקום km אני יכתוב meters ויזיז את הנקודה ל1609.34

תמונת המגיב

יוסי בתאריך: 18.11.2023

אלופיםםם תודה רבה לכם

תמונת המגיב

יעל בתאריך: 17.03.2024

אתה מסביר מצוין