פונקציות

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

הפונקציה הבסיסית#

זהו הסינטקס הבסיסי להגדרת פונקציה בפייתון:

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

אם הרצתם את הקוד בטח שמתם לב שכלום לא קרה. זה בגלל שרק הגדרנו את הפונקציה (function definition), אבל לא הפעלנו אותה (function call).

בואו ננסה שוב:

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

פונקציה עם פרמטרים#

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

פונקציה עם פרמטר אחד#

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

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

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

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

בואו נבצע את התהליך בשלבים:

הגדרת הפונקציה: כאשר אתם מגדירים פונקציה, אתם נותנים לה שם ומציינים את המשתנים (שגם נקראים פרמטרים) שהיא מצפה לקבל כקלט. לדוגמה, נניח פונקציה בשם add_one שמקבלת משתנה כקלט בשם num:

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

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

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

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

פונקציה עם מספר פרמטרים#

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

return#

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

פונקציה עם ערך חזרה אחד#

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

פונקציה עם מספר ערכים חזרה#

בצורה דומה אפשר להחזיר מספר ערכים מפונקציה:

פרמטרים ברירת מחדל#

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

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

תרגילים#

תרגיל 1- פונקציה בסיסית#

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

הנה דוגמאת הדפסה:

Enter first number: 10
Enter second number: 20
The sum is: 30

תרגיל 1- פונקציה קוראת לפונקציה#

כתוב פונקציה בשם calculate_area שלוקחת את האורך והרוחב של מלבן ומחזירה את השטח שלו. כתוב פונקציה נוספת בשם print_area שקוראת לcalculate_area ומדפיסה את השטח בצורה יפה. לפונקציה print_area צריך להיות פרמטר ברירת מחדל שנקרא unit אשר ברירת המחדל הוא sq meters.

בחלק הראשי, בקש מהמשתמש את האורך והרוחב של מלבן. לאחר מכן קרא ל-print_area פעמיים: פעם אחת עם יחידת ברירת המחדל ופעם אחת עם היחידה מוגדרת ל-"sq units". הנה דוגמאת הדפסה:

Enter the length: 2
Enter the width: 5
The area of the rectangle is: 10 sq meters
The area of the rectangle is: 10 sq units