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