תויצקנופ :5 רועיש -...

23
שיעור5 : פונקציות1 ברק גונן

Transcript of תויצקנופ :5 רועיש -...

Page 1: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

פונקציות: 5שיעור

1

ברק גונן

Page 2: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

פונקציה היא קטע קוד שקוראים לו בשם

שעליו יבוצעו פעולות, אפשר להעביר לקטע הקוד מידע

אפשר גם לקבל חזרה ערכים מהפונקציה

שם הפונקציה וסוגריים עגולים: בפייתוןקריאה לפונקציה ()my_func: בלי פרמטרים◦

my_func(param): עם פרמטר אחד◦

2 ברק גונן

Page 3: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

דגשים: שם בעל משמעות◦

תיעוד בתחילת הפונקציה◦

תודפס מחרוזת התיעוד help(hello)אם נכתוב ◦

3 ברק גונן

Page 4: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

4 ברק גונן

Page 5: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

תוצאת הקריאה ל-main():

5 ברק גונן

Page 6: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

י "ע, או ערכים, פונקציה מחזירה ערךreturn

לדוגמה:

6 ברק גונן

Page 7: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

אפשר להחזיר יותר מערך אחד:

7 ברק גונן

Page 8: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

הגדרנו את הפונקציה הבאה:

מה יהיה ערכו שלk אם נכתוב כך?

המילהNone ערך ריק , היא מילה שמורה

משתנה יכול להיות שווהNone .

8 ברק גונן

Page 9: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

יש מצבים נוספים בהם יוחזר ערךNone:

כלל returnלפונקציה אין ◦

משתנה/ בלי ערך returnלפונקציה יש ◦

return Noneלפונקציה יש ◦

9 ברק גונן

Page 10: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

מוגדר -משתנה גלובלי

מוכר , מחוץ לפונקציות

לכולם

מוגדר –משתנה לוקלי

מוכר , בתוך פונקציה

רק לפונקציה

10 ברק גונן

?מה תבצע התוכנית

הקריאה ל-speak() תרוץ תקין אבלprint יעלה שגיאת הרצה .

מוכר רק בתוך הפונקציה word המשתנה -הסיבה

Page 11: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

מה ידפיס הקוד הבא?

בתוך הפונקציה נוצר העתק wordמקומי של

הפונקציה אינה משנה את הגלובלי wordערכו של

11 ברק גונן

Page 12: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

מה ידפיס הקוד הבא?

שגיאת הרצה ,word

אינו מוכר בתוך

הפונקציה

כאשר משנים את ? מדוע

ערכו של משתנה

פייתון מניח , בפונקציה

שיש לו עותק מקומי

12 ברק גונן

Page 13: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

יש שתי שיטות לתקן את השגיאה:

מה תהיה התוצאה בכל מקרה?

13 ברק גונן

:globalשימוש במילה :העברת המשתנה כפרמטר

Page 14: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

טיפ לתכנות נכון:

אם רוצים שפונקציה תשנה ◦

מומלץ להעבירו , משתנה

כפרמטר ולהחזיר אותו

, מסוכן global-שימוש ב◦

פונקציה משנה ערכים שיתר

הקוד משתמש בהם

14 ברק גונן

Page 15: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

כיתבו פונקציה בשםfactorial שמחזירה את התוצאה

(עצרת 5! )5של

כיתבו פונקציה בשםbeep שמקבלת מחרוזת ומחזירה

בסופה beepאת המחרוזת ועוד

כיתבו פונקציה בשםkefel שמקבלת שני מספרים

אם התוצאה שלילית 0או , ומחזירה את המכפלה שלהם יותר מפעם אחת בפונקציה returnאפשר לכתוב ◦

15 ברק גונן

Page 16: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

16 ברק גונן

ID

מעבירה פרמטרים לפונקציות פייתוןכיצד

Page 17: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

שפייתוןזוכרים שאמרנו מתרגם פקודות לשפת מכונה

?רק כשהוא מגיע להריץ אותן

אפשר לשים פקודות שגורמותכל עוד הן עונות , לשגיאה

פייתוןלכללי הדקדוק של התוכנית תרוץ

blaבדוגמה הבאה הפונקציה ◦ אינה מוגדרת

למרות זאת התוכנית רצה ◦ OKומדפיסה

17 ברק גונן

Page 18: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

הפונקציהid() מקבלת אובייקט

( שם כללי למשתנה או פונקציה)

ומחזירה את הכתובת שלו בזיכרון

אם לשני אובייקטים יש את אותוid() , זה אומר שהם מצביעים על

אותו אובייקט בזיכרון◦is מבצע את השוואה הזו

נסו למצוא את הכתובת בזיכרון idשל הפונקציה

18 ברק גונן

Page 19: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

כזכור קיימות שתי שיטות להעברת פרמטרים לפונקציה:

◦ Pass by value

◦ Pass by reference

19 ברק גונן

Page 20: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

בשיטה זו מועבר לפרוצדורה ערך הפרמטר

על המחסנית נוצר העתק

של הפרמטר

לפרוצדורה אין גישה

לפרמטר המקורי, אינה יכולה לשנות את ערכו◦

רק את ההעתק

20 ברק גונן

Page 21: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

מעבירים לפרוצדורה את

הכתובת של הפרמטר

על המחסנית לא נוצר העתק

של הפרמטר

לפרוצדורה יש גישה לכתובת

בזיכרון שמכילה את הפרמטר יכולה לשנות את ערכו◦

21 ברק גונן

Page 22: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

פייתון מעביר לפונקציותby reference

נוצר אובייקט חדש, אם מנסים לשנות אותו ,אבל* by value-אפקט דומה ל◦

נלמד בהמשך -immutableרק אם הוא *

22 ברק גונן

Page 23: תויצקנופ :5 רועיש - blog.csit.org.ilblog.csit.org.il/UpLoad/FilesUpload/1450-3-05.pdf · האצותה תא הריזחמש factorial םשב היצקנופ ובתיכ )תרצע

23 ברק גונן

, לפני השינוי ()idאותו

, אחרי השינויid() שונה

והערך ()id -ה, מחוץ לפונקציה

המקורי ללא שינוי