פונקציות הן קוד שמאורגן בתוך בלוק של קוד, כאשר ניתן לקרוא לפונקציה במהלך התוכנית על מנת להפעיל אותה. פונקציות נועדו לעשות משימה ספציפית שאליה הוגדרו
כפי שראינו במהלך הקורס, שפת Python מספקת מגוון של פונקציות מובנות שנועדו לפעולות מסוימות, כמו ()print למשל, אך כמו כן אנו יכולים ליצור פונקציות בעצמנו שיקלו עלינו במהלך כתיבת הקוד.
הגדרת פונקציה
על מנת להגדיר פונקציה יש לפעול לפי הכללים הבאים:
- קוד בלוק של פונקציה מתחיל במילת המפתח def שלאחריה שם הפונקציה וסוגריים ()
- כל הפרמטרים והפקודות של הפונקציה צריכות להיכתב בתוך הסוגריים ()
- המשפט הראשון בפונקציה יכול להיות אופציונלי.
- בלוק הקוד שנמצא בתוך כל פונקציה צריך להתחיל בסמל נקודותיים (:)
- הביטוי return גורם ליציאה מהפונקציה
לדוגמה:
def printme(str = "Hello, World!"): print (str) return
כפי שניתן לראות, נתנו שם לפונקציה והגדרנו לה מה ביכולתה לעשות.
קריאה לפונקציה
לאחר שהגדרנו את הפונקציה, נרצה לקרוא לה בשלב כזה או אחר של התוכנית:
def printme(str = "Hello, World!"): print (str) return printme()
!Hello, World
עדכון ערכים על ידי פונקציה
אם פונקציה מסוימת שיצרנו, משנה ערך מסוים, אז אותו הערך ישתנה גם בעת הקריאה לפונקציה. למשל:
def changeme( mylist ): "This changes a passed list into this function" print ("Values inside the function before change: ", mylist) mylist[0]=mylist[0] + 100 mylist[1]= 2 print ("Values inside the function after change: ", mylist) return mylist = [1,25,714] changeme( mylist ) print ("Values outside the function: ", mylist)
[Values inside the function before change: [1, 25, 714
[Values inside the function after change: [101, 2, 714
[Values outside the function: [101, 2, 714
כפי שניתן לראות, פונקציה זו אשר יצרנו מוסיפה 100 לאלמנט הראשון ברשימה, וקובעת את האלמנט השני כבעל ערך של 2. כאשר אנו קוראים לפונקציה זו היא מבצעת את השינויים ומדפיסה את הרשימה החדשה.
פונקציות אנונימיות
פונקציות אלו נקראות אנונימיות, משום שאנו לא מכריזים עליהם באמצעות def כמו שעשינו עד עכשיו. ניתן להשתמש במילת המפתח lambda על מנת להגדיר פונקציות אנונימיות קצרות.
- מבני lambda יכולים להכיל מספר ביטויים, אך הם מחזירים ערך אחד בודד כביטוי. הם אינם יכולים להכיל פקודות וכדומה.
- פונקציה אנונימית לא יכולה להיות קריאה ישירה לפונקציית ()print, משום ש-lambda צריך ביטוי.
- לפונקציות lambda יש שמות מקומיים, ולא ניתן לגשת באמצעותה למשתנים שלא נמצאים בתוכה.
sum = lambda arg1, arg2: arg1 + arg2 print ("Value of total : ", sum( 1, 1 )) print ("Value of total : ", sum( 10, 10 ))
Value of total : 2
Value of total : 20
כפי שניתן לראות, הגדרנו פונקציית lambda שנועדה לחבר בין שני ערכים, ולאחר מכן קראנו לפונקציה שתבצע את פעולתה בשני משפטים שונים.
הביטוי return
ביטוי זה גורם ליציאה מהפונקציה, כאשר ניתן להוסיף גם אפשרות ש-return יחזיר לנו ביטוי. בכל הדוגמאות הקודמות שבהן השתמשנו בביטוי זה, ביטוי ה-return היה ריק ולא החזיר לנו ביטוי. על מנת ש-return יחזיר לנו ביטוי:
def sum( arg1, arg2 ): total = arg1 + arg2 print ("Inside the function : ", total) return total total = sum( 4, 3 ) print ("Outside the function : ", total )
Inside the function : 7
Outside the function : 7
משתנים גלובליים ומשתנים מקומיים
לא כל המשתנים שיצרנו בתוכנית מסוימת יהיו נגישים לשימוש מכל מקום בתוכנית, השאלה היא איפה יצרנו אותם. בהקשר זה המשתנים שקיימים בתוכנית מתחלקים לשני קבוצות – משתנים גלובליים ומשתנים מקומיים.
משתנים שיצרנו בתוך פונקציה יחשבו כמשתנים מקומיים, כאשר אנו יכולים לגשת אליהם רק בתוך הפונקציה. למשתנים גלובליים שנוצרו מחוץ לפונקציות, נוכל להתייחס מכל מקום בתכנית, כולל מתוך פונקציות. לדוגמה:
total = 0 # This is global variable. def sum( arg1, arg2 ): total = arg1 + arg2; # Here total is local variable. print ("Inside the function local total : ", total) return total sum( 4, 3 ) print ("Outside the function global total : ", total )
Inside the function local total : 7
Outside the function global total : 0