פונקציות בפייתון

פונקציות בפייתון

מאמר זה מסביר על פונקציות בפייתון.

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

מרכיבי פונקציה

  1. שם הפונקציה: שם הפונקציה, שמשמש כדי לקרוא לה.

  2. ארגומנטים (פרמטרים): שמות משתנים שמקבלים נתונים שמועברים בזמן הקריאה לפונקציה. ניתן להגדיר אפס או יותר ארגומנטים.

  3. מחרוזת תיעוד (Docstring): מחרוזת המשמשת לתיאור מטרת הפונקציה והשימוש בה. אופציונלי.

  4. גוף הפונקציה: בלוק עם הזחה שבו נכתבות ההוראות שהפונקציה מבצעת.

  5. ערך החזרה: הערך שמוחזר למי שקרא לפונקציה באמצעות הצהרת return. אם משמיטים את return, ברירת המחדל היא ש-None יוחזר.

סוגי ארגומנטים

בפייתון קיימים מספר סוגי ארגומנטים.

  1. ארגומנטים מיקום: הדרך הסטנדרטית להעביר ארגומנטים לפונקציות.
  2. ארגומנטים ברירת-מחדל: ארגומנטים עם ערכים ברירת-מחדל שניתן להשמיט בזמן הקריאה.
1def greet(name, message="Hello"):
2    print(f"{message}, {name}")
3
4greet("Alice")  # "Hello, Alice"
5greet("Bob", "Good morning")  # "Good morning, Bob"
  1. ארגומנטים באורך משתנה: *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 מועילות במצבים שבהם יש צורך להגדיר פונקציה פשוטה במקום. הן נפוצות במיוחד במקרים הבאים:.

  1. כאשר מועברות כארגומנטים לפונקציות

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

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

YouTube Video