פונקציות בפייתון
מאמר זה מסביר על פונקציות בפייתון.
YouTube Video
פונקציות בפייתון
פונקציות בפייתון הן תכונה חיונית להגדרת בלוקים של קוד ניתן לשימוש חוזר, שמאפשרת לארגן ולפשט את התוכנית על ידי קריאה להן לפי הצורך. שימוש בפונקציות יכול לשפר את קריאות הקוד ולעמוד בעקרון DRY (אל תחזור על עצמך, הימנע מכתיבת אותו קוד מספר פעמים).
הגדרת פונקציות
פונקציות מוגדרות באמצעות מילת המפתח def
. התחביר הבסיסי הוא כדלקמן:.
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_value
לדוגמה, כדי להגדיר פונקציה שמוסיפה שני מספרים, יש לכתוב:.
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + y
קריאה לפונקציות
פונקציה שהוגדרה ניתנת לקריאה ושימוש כך:.
1result = add(3, 4)
2print(result) # Output: 7
מרכיבי פונקציה
-
שם הפונקציה: שם הפונקציה, שמשמש כדי לקרוא לה.
-
ארגומנטים (פרמטרים): שמות משתנים שמקבלים נתונים שמועברים בזמן הקריאה לפונקציה. ניתן להגדיר אפס או יותר ארגומנטים.
-
מחרוזת תיעוד (Docstring): מחרוזת המשמשת לתיאור מטרת הפונקציה והשימוש בה. אופציונלי.
-
גוף הפונקציה: בלוק עם הזחה שבו נכתבות ההוראות שהפונקציה מבצעת.
-
ערך החזרה: הערך שמוחזר למי שקרא לפונקציה באמצעות הצהרת
return
. אם משמיטים אתreturn
, ברירת המחדל היא ש-None
יוחזר.
סוגי ארגומנטים
בפייתון קיימים מספר סוגי ארגומנטים.
- ארגומנטים מיקום: הדרך הסטנדרטית להעביר ארגומנטים לפונקציות.
- ארגומנטים ברירת-מחדל: ארגומנטים עם ערכים ברירת-מחדל שניתן להשמיט בזמן הקריאה.
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"
- ארגומנטים באורך משתנה:
*args
לקבלת מספר ארגומנטים מיקוםיים כטופל, ו-**kwargs
לקבלתם כמילון.
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}
על ידי שימוש נכון בפונקציות, תוכלו לכתוב תוכניות Python בצורה יעילה ואפקטיבית יותר.
פונקציות Lambda ב-Python
ב-Python, פונקציות lambda
משמשות להגדרת פונקציות אנונימיות ותמציתיות. בניגוד לפונקציות שמוגדרות עם מילת המפתח def
, lambda
מאפשרת ליצור פונקציות קצרות בשורת קוד אחת. כאן נסביר בפירוט על פונקציות lambda
ב-Python.
יסודות פונקציות lambda
פונקציות lambda
, שמכונות גם פונקציות אנונימיות, משמשות להגדרת פונקציות זמניות ללא שם, כפי שמשתמע משמן. התחביר הבסיסי הוא כדלקמן:.
1lambda arguments: expression
arguments
: ציון הארגומנטים של הפונקציה. ניתן לציין מספר ארגומנטים המופרדים בפסיקים.expression
: זהו ביטוי שמוערך בהתבסס על הארגומנטים. התוצאה של הביטוי הופכת לערך המוחזר של הפונקציה.
לדוגמה, הקוד הבא מגדיר ומבצע פונקציית lambda
שמוסיפה שני מספרים.
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8
בדוגמה זו, lambda x, y: x + y
היא פונקציית lambda
שלוקחת שני ארגומנטים, x
ו-y
, ומחזירה את סכומם.
שימושים לפונקציות lambda
פונקציות lambda
מועילות במצבים שבהם יש צורך להגדיר פונקציה פשוטה במקום. הן נפוצות במיוחד במקרים הבאים:.
-
כאשר מועברות כארגומנטים לפונקציות
- זה שימושי בפונקציות מסדר גבוה (פונקציות שמקבלות פונקציות אחרות כארגומנטים) בעת העברת פונקציות קצרות וזמניות.
-
כאשר מציינים מפתחות למיון רשימות
- הן שימושיות לציון קריטריוני מיון (מפתחות) בפונקציות כמו
sort()
אוsorted()
.
- הן שימושיות לציון קריטריוני מיון (מפתחות) בפונקציות כמו
דוגמה לשימוש בפונקציות מסדר גבוה
דוגמאות אופייניות לפונקציות מסדר גבוה כוללות את map()
, filter()
ו-reduce()
. פונקציות אלו לוקחות פונקציות אחרות כארגומנטים ומיישמות אותן על מבנים כמו רשימות.
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]
בדוגמה זו, פונקציית lambda
מועברת לפונקציית map()
כדי להעלות כל מספר ברשימה בריבוע.
דוגמאות לשימוש במיון רשימות
פונקציית lambda
יכולה לשמש לעיתים לציון מפתח מותאם אישית בעת מיון רשימה. לדוגמה, הקוד הבא ממיין רשימה של זוגות (tuples) בהתבסס על האלמנט השני.
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
בדוגמה זו, משתמשים בפונקציית lambda
כדי למיין את ה-tuples לפי האלמנט השני שלהם (מחרוזת).
filter()
ו-lambda
פונקציית filter()
משמשת לסינון אלמנטים ברשימה (או כל אובייקט ניתן לחזרה) בהתאם לתנאי נתון.
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]
בדוגמה זו, המספרים הזוגיים ברשימה מסוננים ליצירת רשימה חדשה.
lambda
ו-reduce()
פונקציית reduce()
משמשת לצמצום רשימה לערך יחיד. ניתן לממש אותה בקלות על ידי שימוש בפונקציית lambda
.
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120
בדוגמה זו, כל האלמנטים ברשימה מוכפלים זה בזה כדי להפיק תוצאה.
יש להימנע משימוש בפונקציות lambda
מורכבות
היתרון של פונקציות lambda
הוא התמציתיות שלהן, אך הן הופכות לקשות לקריאה כאשר משתמשים בהן למימוש לוגיקה מורכבת. לכן, זה מתאים להשתמש בהן לפעולות פשוטות שניתן להביע בשורה אחת. לפונקציות מורכבות, הגדרת פונקציה עם def
היא יותר קריאה ותחזוקתית.
לדוגמה, יש להימנע משימוש בפונקציות lambda
מורכבות כמו הדוגמה שלהלן.
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)
במקרה זה, עדיף להשתמש בפונקציה המוגדרת עם def
, כפי שמוצג למטה.
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2
סיום
פונקציות lambda
של Python הן כלי נוח להגדרת פונקציות זמניות וקצרות. הן משמשות לעיתים קרובות בפונקציות מסדר גבוה או בפעולות ברשימה, כדי להגדיר בקצרה תנאים מסוימים. עם זאת, יש להגביל את השימוש בפונקציות lambda
למשימות פשוטות, ולהעדיף פונקציות def
ללוגיקה מורכבת.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.