פונקציות כארגומנטים
שיעור 3 מתוך 12 בקורס דקורטורים ב-Python של Coddy.
ב-Python, אנחנו יכולים להעביר פונקציה כארגומנט לפונקציה אחרת.
לדוגמה,
def add_numbers(a, b):
return a + b
def multiply_numbers(a, b):
return a * b
def calculate(func, a, b):
return func(a, b)
result = calculate(add_numbers, 2, 3)
print(result) # פלט: 5
result = calculate(multiply_numbers, 2, 3)
print(result) # פלט: 6
בדוגמה הזאת, אנחנו מגדירים שתי פונקציות: add_numbers ו-multiply_numbers.
לאחר מכן אנחנו מגדירים פונקציה שלישית בשם calculate, שמקבלת פונקציה func כארגומנט הראשון שלה, יחד עם שני ארגומנטים נוספים a ו-b.
כשאנחנו קוראים ל-calculate, אנחנו מעבירים את שם הפונקציה שבה אנחנו רוצים להשתמש (או add_numbers או multiply_numbers) כארגומנט func, יחד עם שני המספרים שעליהם אנחנו רוצים לבצע פעולה.
לאחר מכן, הפונקציה calculate קוראת לפונקציה func עם שני המספרים ומחזירה את התוצאה.
בדוגמה שלמעלה, אנחנו קוראים ל-calculate פעמיים: פעם אחת עם add_numbers ופעם אחת עם multiply_numbers.
הקריאה הראשונה מחזירה את הסכום של 2 ו-3 (שהוא 5), והקריאה השנייה מחזירה את המכפלה של 2 ו-3 (שהיא 6).
אתגר
קלכתוב פונקציה בשם list_operator שמקבלת רשימת מספרים שלמים ופונקציית אופרטור כארגומנטים.
הפונקציה operator צריכה לקבל שני מספרים שלמים כקלט ולהחזיר מספר שלם אחד כפלט.
הפונקציה list_operator צריכה להחיל את פונקציית האופרטור על כל זוג של מספרים שלמים סמוכים ברשימה ולהחזיר רשימה חדשה עם התוצאות.
כך הפונקציה אמורה לעבוד, לדוגמה:
>>> numbers = [1, 2, 3, 4, 5]
>>> result = list_operator(numbers, operator.add)
>>> result
[3, 5, 7, 9]
>>> numbers = [10, 20, 30, 40]
>>> result = list_operator(numbers, operator.mul)
>>> result
[200, 600, 1200]אילוצים
- רשימת הקלט תכיל תמיד לפחות שני מספרים שלמים.
- פונקציית האופרטור תמיד תקבל שני מספרים שלמים כקלט ותחזיר מספר שלם אחד כפלט.
שימו לב! אנחנו מספקים את פונקציית האופרטור, אין צורך ליצור אותה, רק להשתמש בה.
נסו בעצמכם
כל השיעורים ביחידה דקורטורים ב-Python
תרגלו בעצמכם: קומפיילר Python אונליין