פרק קודם:
פייתון 19 - מחלקות חלק גמה נלמד
- שימוש בפונקציות כחשיבה בלוגיקה
- פונקציות כיחידות לוגיות בזיכרון
- מה הן למבדות - Lambdas
- כיצד כותבים למבדות
- שימושים עיקריים
פונקציות כחשיבה לוגית
פונקציות משמשות אותנו כיחידות לוגיות או מתמטיות לתוצר כלשהו - הן מבצעות פעולה מסוימת.
כמו משתנים אנחנו יכולים לשמור, להעתיק, לשנות או להחזיר פונקציות.
תקראו את קוד הפייתון והבא:
1 | def Add(a,b): |
שימו לב לתחביר ששונה פה - לא קראנו לפונקציה בעזרת קריאה לסוגריים מעוגלים ()
.
מה שעשינו כאן זה השתמשנו בשם של הפונקציה כדי להעביר את הפעולה למשתנה a
.
משתנה a
מחזיק עכשיו את הפונקציה.
קריאה למשתנה הזה עם סוגריים מעוגלים קורא לפונקציה.
כבר הכרנו את הנושא הזה בפרק פייתון 9 - מילונים, טופלים וסטים.
למדנו על כך שניתן להעביר פונקציה כפרמטר על מנת לסדר רשימות.
איך ניתן להסתכל על זה:
יש לנו פרמטר a
אשר לוקח לעצמו את Add
.
קריאה ל-a
בעצם קורא ל-Add
.
אם נשווה את העצמים עצמם - a
ו-Add
נוכל לראות שהם זהים:
מזה נוכל להבין שהפונקציה המקורית לא שוכפלה, בעצם a
מצביע לפונקציה המקורית.
הטרמינולוגיה “מצביע” אומר שעצם הוא בעצם עצם אחר.
אנחנו לא נלמד על מצביעים בזיכרון מכיוון שבפייתון בד”כ לא ניגשים לזיכרון הפיזי.
לכן מה שחשוב לזכור הוא עקרון העצמים - כמו מחלקות שיוצרים שני אובייקטים שונים.
מה הן למבדות
למבדה - Lambda היא פונקציה אנונימית - ללא שם.
כותבים למבדה אך בד”כ לא אומרים את ה-“ב”.
למשל בהגדרת הפונקציה הזו יש לנו שם:
1 | def Add(a,b): |
כתיבת למבדות
התחביר הוא:
1 | lambda a,b: a + b |
כמו שראינו ניתן לשים למבדות במשתנים וכך לתת להם שם:
1 | add = lambda a,b: a+b |
ניתן להחזיר למבדות מפונקציות (תזכרו את העקרון הזה לפרק הבא!).
1 | def SelectFunction(command): |
תרגיל
תחשבו על מקרים בו נרצה להחזיר פונקציה מפונקציה.
תחזרו לפרק 9, כעת נשכתב את הקוד הזה בעזרת למבדות.
1 | def SortBy(element): |
- בעזרת למבדות כתבו תכנית מחשבון פשוטה שיודעת לעבד את התווים: +, -, *, /
חיבור, חיסור כפל וחילוק בהתאמה.
- מקרה כללי הוא כאשר אנחנו רוצים לשלוט בהתנהגות בזמן ריצה בעזרת בחירת קלט מהמשתמש או בעזרת פרמטרים מקובץ.
- עטיפה של פונקציות כדי לבצע קוד נוסף בכך אנחנו לא נוגעים בפונקציה המקורית - עוד על זה בפרק הבא.
- שימוש בפונקציות על מנת להימנע מבנייה של פרמטרים כמו למשל להחזיר פונקציה שיודעת לבנות את הפרמטר - Factory Pattern.
השאלה הזו לא פשוטה להיגיון של מתכנת לא מנוסה ולכן אל תרגישו רע אם לא הצלחתם לעלות על מקרים.
זו דוגמא לחשיבה לוגית תכנותית אשר באה גם עם ניסיון וגם עם למידה, לכן אף פעם אל תפסיקו ללמוד!
1 | sortBy = lambda element : len(element) |
תוצאה:
1 | ['A', 'AA', 'AAA', 'AAAA'] |
1 | import re |
- השתמשנו ב-regex על מנת לעבד את המחרוזת, אם אתם לא בטוחים מה הקוד הזה אומר תחזרו לפרק 15:
Lambdas הן פונקציות אנונימיות שימושיות במקרים שצריך לוגיקה קטנה ומהירה,
הן יכולות לעטוף או לקרוא לפונקציות אחרות וכך לקרוא ללמבדות או פונקציות אחרות.
בפרק הבא אנחנו נלמד על פיצ’ר מאוד חשוב - ה-Decorator.
ובכך נעלה את יכולות תכנות הפונקציות שלנו.