PracticU

פונקציות בפייטון - חלק 1

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › פונקציות בפייטון - חלק 1
מילון מושגים:
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
Python - שפת תכנות עילית וקריאה, נפוצה בפיתוח, אוטומציה, ניתוח נתונים ולמידת מכונה.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.

פונקציות בפייטון - חלק 1
פונקציה ב-Python היא אוסף קוד שמבצע פעולה מסוימת וקטנה. השיעור מסביר איך מגדירים פונקציות, איך מחזירים ערכים, וכיצד עובדים עם ארגומנטים בשם, עם ערכי ברירת מחדל ועם מספר משתנה של ארגומנטים.
השלבים העיקריים
1. הגדרה וקריאה: מגדירים פונקציה עם המילה def, שם וסוגריים, והקוד נכתב בהזחה. השימוש בפונקציות מונע כתיבה חוזרת של אותו קוד, ומאפשר מודולריות ברמות שונות של התוכנית.
2. ארגומנטים: הפונקציה מקבלת פרמטרים בתוך הסוגריים. הקריאה חייבת להתאים למספר הפרמטרים.
3. החזרת ערך: פונקציה שאינה מחזירה ערך מחזירה None. ניתן להחזיר כמה ערכים בפסיקים, והם מתקבלים כטאפל שניתן לגשת לכל איבר בו לפי אינדקס.
4. ערך ברירת מחדל: def f(a, b=4) מאפשר לקרוא לפונקציה בלי לציין את הפרמטר השני, ואז הוא מקבל 4.
5. קריאה בשם: ניתן לציין פרמטרים בשם, כמו f(a=1, b=6). הסדר אז אינו חשוב, והקוד נעשה קריא יותר.
6. פירוק רשימה ומילון: כוכבית לפני רשימה מפרקת אותה לארגומנטים. שתי כוכביות לפני מילון מפרקות אותו לארגומנטים בשם.
7. ארגומנטים משתנים: *args מקבל מספר לא ידוע של ארגומנטים כטאפל, ו-kwargs מקבל ארגומנטים בשם כמילון. הסדר הנכון הוא: פרמטרים רגילים, אחריהם *args, ואז kwargs.
טעויות נפוצות
- ערך ברירת מחדל של רשימה נשמר בין קריאות לפונקציה. בדוגמה הרשימה ממשיכה לגדול בכל קריאה. הפתרון הוא להשתמש ב-None ולהגדיר בתוך הפונקציה רשימה חדשה.
- חיבור מחרוזת עם מספר נכשל, ולכן כדאי לבדוק את הטיפוס לפני החיבור.
- כשהפרמטרים אינם תואמים לחתימה של הפונקציה, נזרקת שגיאה, למשל "Unexpected Keyword Argument".
שימו לב
שמות ארגומנטים משמעותיים הופכים את הקוד לקריא, ומקלים על מי שמשתמש בפונקציה ועל מי שמחפש באגים.
פונקציות עם ארגומנטים גמישים הן כלי עיקרי לחלוקת הקוד למודולים.
השיעור הבא בקורס: פונקציות בפייטון - חלק 2

פרקי ההרצאה: פונקציות בפייטון - חלק 1

  1. 00:00

    מבוא: פונקציות בפייתון ולמה משתמשים בהן

  2. 01:17

    פונקציה עם פרמטר והדפסה

  3. 01:58

    פונקציה שמחזירה ערך עם return

  4. 05:34

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

  5. 07:09

    ערכי ברירת מחדל לפרמטרים

  6. 08:33

    קריאה עם שמות פרמטרים

  7. 11:32

    פתיחת רשימה לפרמטרים (unpacking)

  8. 14:18

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

תמלול ההרצאה: פונקציות בפייטון - חלק 1

הטקסט המלא של הדקות הראשונות בהרצאה «פונקציות בפייטון - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    שלום לכולם, בשיעור הזה נדבר על פונקציות בפייתון. דבר ראשון, פונקציה זה אוסף של קוד, שהמטרה שלו לעשות פעולה מסוימת, יותר ספציפית וקטנה.

  2. 00:17

    למה אנחנו עושים פונקציות? זה כדי שנוכל לעשות Usability לקוד. כלומר, אם נגיד אנחנו רוצים לבדוק את הסכום של שני מספרים, אם נעשה את זה כל פעם שאנחנו נצטרך לבדוק את הסכום שלהם, אז הקוד שלנו יהיה מאוד ארוך.

  3. 00:29

    לעומת זאת, אם יהיה לנו בלוק של קוד שאנחנו יכולים להגיד לו, מחזיר לי את הסכום של שני המספרים, אז הקוד שלנו יהיה הרבה יותר קצר.

  4. 00:40

    אז בעצם כל הקטע של פונקציות זה כחלק מתוכניות, תכנות לעשות מודולריות לקוד שלנו. כלומר, יש לנו מודולריות ברמת הפונקציה, ברמת האובייקט, אם זה Object Oriented, ברמת המודול וברמת התוכנה, וככה אנחנו יכולים לעשות Usability ברמות שונות

  5. 01:00

    בקוד שלנו. עכשיו, פייתון פונקציה מוגדרת מאוד בקלות על ידי המילה השמורה def ואז השם של הפונקציה שזה יכול להיות נגיד בשביל הדוגמה sum2 בעצם הוא התחיל בדוגמה יותר פשוטה מייברינט שהיא מקבלת איזשהו אובייקט וכל מה שהיא תעשה היא תדפיס אותו למסך ואם אנחנו רוצים לקרוא לפונקציות פשוט

  6. 01:38

    טוב מייברינט ואת האובייקט שאנחנו רוצים לקרוא לו עכשיו אנחנו רוצים להדפיס למסך "hello world" אם נריץ את הדבר הזה על ידי השולש פה.

  7. 01:58

    זהו, קראנו לפונקציה. אבל פונקציה בפייתון זה דבר הרבה יותר מסובך. פונקציה יכולה, חוץ מלקבל פרמטרים, היא יכולה גם להחזיר פרמטרים.

  8. 02:09

    היא יכולה גם לא לקבל פרמטרים בכלל, דרך אגב. יכולתי לכתוב, למחוק פה את ה-st, שם פה להדפיס, צריך להעיף את הפרמטר מכאן, כי בעצם אין התאמה בין הקריאה לפונקציה לבין הפרמטרים שהיא מקבלת, וזהו בוא נעשה משהו קצת יותר מתוך בוא נעשה

  9. 02:39

    גם פונקציה שמחזירה ערך נגיד פונקציה שמקבלת a וb והיא מחזירה piece את a ועוד b וגם תחזיר את a ועוד b אני יכול לקרוא 1, 2 למשל ואני אקבל 3 שנייה רגע בוא נעשה c כזה print אפשר לראות גם את התוצאה שהמיין שלנו יחזיר כלומר שהסקריפטר הראשי שלנו יחזיר את התוצאה פונקציה כמו שאנחנו רואים יש לנו את הקוד מתחיל בהגדרה של

  10. 03:33

    הפונקציה היא לא רצה אבל פייטון מגדיר אותה הוא רואה שיש לנו פה בייק שנקרא מייברינט שמקבל a וb לאחר מכן הוא רואה שיש פה קריאה לפונקציה הוא קורא לה בתוך הפונקציה הוא מדפיס את a ועוד b הוא מחזיר את a ועוד b ולאחר מכן הוא מדפיס את התוצאה מחוץ הפונקציה נגמרת כמו כל דבר אחר בפייטון לפי הזכות,

  11. 03:59

    כלומר אם הייתי כותב פה עוד איזשהו שורה זה היה עדיין חלק מהפונקציה שלי, אבל מכיוון שהשורה שלאחר מכן היא נמצאת ארבעה ספייסים אחורנית זה כבר לא חלק מהפונקציה.

  12. 04:15

    שימו לב שאני לא אמרתי לפונקציה מה זה a ועוד b, זה בעצם דבר שהוא נכון לכל פייתון, אז אם אני אתן לפונקציה הזאת ערכים לא תקינים אני אקבל פה תוצאות קצת לא צפויות כמו exception, כי אני בעצם לא יכול, אני לא יכול לחבר סטרינג

  13. 04:35

    ואינט. על הדבר הזה אפשר להתגבר מאוד בקלות. אפשר פשוט לעשות if type של a שונה מ-type b. אז אחרת, פונקציה שבהגדרה לא מחזירה כלום בעצם מחזירה נאן.

  14. 05:07

    בואו נראה מה קורה עכשיו. אני רק אענה לך אם זה שווה. my function returns none, כי בעצם אי אפשר לחבר אחד סטרינג ואינטג'ר. איינטון היא לא שפה שמנסה לעשות לך המרות אוטומטיות בניגוד לשפות אחרות שכן מנסות לעשות את זה.

  15. 05:28

    פונקציה גם יכולה להחזיר כמה פרמטרים. למשל, בואו נכתוב פונקציה שמקבלת a וb ומחזירה גם את הסכום שלהם וגם את הכפל שלהם. אז כל מה שצריך לעשות זה return a ועוד b, ולא צריך סוגריים, a ועוד b פסיק a כפול b למשל, ואז בונים הם ה-utpass 3 ו-2 כי 1 ועוד 2 3, פול שתיים זה שתיים בעצם c זה טאפל קיבלנו חזרת טאפל שים לב שc לא

  16. 06:05

    יכול להשתנות אם נעשה c במקום האפס שווה אחד נקבל שגיאה כי הוא לא יכול להשתנות שימו לב שבגלל שc הוא טאפל אפשר לגשת אליו עם אינדקסים מהי function return זה יכול לעשות c במקום האפס return sum function return אפשר לכתוב כזה דבר סאם איז, מולטי פליינג, מולי על האנגלית, איז

  17. 06:55

    ואינדקס אחד וקיבלנו שני הערכים מהפונקציה שלנו. שימו לב שלפונקציה בספייטון יכול להיות גם ערך דיפולטיבי. למשל, a, b שווה 4. אם נריץ את הקוד כך, לא יהיה שום הבדל.

  18. 07:22

    אם נמחוק את 2, הקוד הזה עדיין יהיה תקין ו-b יהיה שווה 4, אנחנו בעצם נתנו את a ו-b הוא ייקח מהערך הדיפולטיבי שהוא 4. כמו כן אפשר בקריאה לפונקציה לכתוב a שווה זה בעצם אותו דבר אבל אז אפשר לעשות a שווה 1, b שווה 6. שימו לב שזה לא משנה הסדר של a וb פה, אפשר לעשות b שווה 6 ואז a שווה 1, זה עדיין יעבוד.

  19. 07:57

    היתרון בזה זה א' הקוד הרבה יותר קריא, כלומר שאני רואה אם הפונקציה לא נמצאת ליד הקריאה אליה וזה בדרך כלל המצב, פונקציה מוגדרת בקובץ אחד, לפעמים בתיקייה אחרת גם, והקריאה לפונקציה, או יותר נכון הקריאות לפונקציה נמצאות במקום אחר.

  20. 08:18

    ואתה צריך, אוקיי, יש לי את הפונקציה הזאת, מה הפרמטר הראשון, מה הפרמטר השני, וככה זה קצת יותר מקל. כמובן שזה יותר מקל בערכים שהם עם שמות יותר הגיוניים. עכשיו אנחנו נתקן את זה גם.

  21. 08:38

    נשתמש ב-re-factoring שלנו. נחליק עם אני. כמובן שעכשיו הקוד יהיה הרבה יותר קריב, ואני לא באמת צריך את החתימה של הפונקציה לדעת מה יש פה.

  22. 09:19

    יותר מזה, אם החתימה של הפונקציה השתנתה, נגיד עכשיו הפונקציה כבר לא מקבלת מספרים, היא מקבלת סטרינג. אם אני אדאג לכתוב את זה כמו שצריך, כבר לא יעבוד, אני אקבל אקספצ'ן, ואני אבין שהפונקציה שלי כבר השתנתה, ולכן אני לא יכול...

  23. 09:41

    סטרינג, סטרינג, סטרינג. עכשיו, אם אני אריץ את הקוד שלי, אני רואה שהפונקציה קיבלה Unexpected Keyword Argument, כלומר הפונקציה קיבלה number 2 וnumber 1 והיא לא יודעת איפה number 1 נמצא, הוא לא נמצא בחתימה של הפונקציה ולכן קיבלנו exception.

  24. 10:07

    ככה בעצם חסכנו לנו בעיה, כי היה לנו איזושהי פונקציה שקיבלה מספר מסוים של פרמטרים עם שמות משמעותיים והיא עשתה עליהם איזשהו חישוב.

  25. 10:18

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

  26. 10:32

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

  27. 10:56

    אז היא אומרת, אוקיי, אין לי פה בהתחלה שום דבר, המספר 6 כנראה מתאים ל-number 1. ואז היא אומרת, אוקיי, ועכשיו יש לי אבל number 1 ששווה ל-1, אבל number 1 אני כבר אמרתי שהוא 6, אני לא יודעת מה לעשות, Exception.

  28. 11:11

    קיבלתי Multiple Values for Keyword Arguments. לכן, דבר ראשון, אם אתם רוצים להשתמש ב-Keyword Arguments, אז א', הם חייבים להיות בסוף, כלומר, גם הדבר הזה לא יעבוד.

  29. 11:29

    יש סדר לדברים. ודבר שני, אתם צריכים לשים לב שאין לכם בטעות, כמו שהיה לי מקודם, שאתם קוראים לאותו משתנה פעמיים, פעם דרך הערך שלו ופעם דרך שימוש מיוחד מסוים בשם שלו.

  30. 11:44

    פייתון מאפשרת עוד דבר. אתם רוצים לשלוח ליסט לפונקציה ושהליסט הזה ייפתח. למה אני מתכוון? נגיד יש לי ליסט, יש בתוכו תארכים 1 ו-7 ואני רוצה לשלוח אותו לפונקציה.

  31. 12:08

    אז הדבר הפשוט שאני יכול לעשות זה לכתוב lst0 ו-lst1 וזה היה עובד, אבל אם נגיד יש לי ליסט של עשרה פרמטרים ויכולת להיות פונקציה של עשרה פרמטרים, זה קצת מעצבן לכתוב list 1, 0, 1, 2, 3.

  32. 12:26

    אז אפשר פשוט לכתוב חבית lst, וזה בעצם אומר לפייתון, תעשה unpacking ל-list. כלומר, תשלח כללית, אבל אל באמת תשתמש בו, אל באמת תשלח אותו בתור פרמטר לערך הראשון, אלא תעשה לו unpacking.

  33. 12:43

    מה עוד אנחנו יכולים לעשות פה? בוא נגיד שיש לנו גם number 3, ואנחנו רוצים להוסיף גם פה number 3 לפה, אני יכול להגיד אוקיי אני רוצה שהערך הראשון יהיה שלוש ואת שאר הערכים תעשה unpack לליסט שלי וזה יעבוד אז כמה דגשים דבר ראשון חשוב שהאורך של הליסט יתאים לאורך של מספר הארגומנטים בפונקציה למשל אם אני אוסיף פה איזשהו ערך אז זה לא יעבוד

  34. 13:31

    אני מקבל פה בעיה הוא אומר שמייפרינט ציפתה לקבל שלושה ארגומנטים אבל וקיבלתי 4. דבר נוסף זה, שימו לב למה זה חוסך לנו.

  35. 13:44

    אם הייתי רוצה לשלוח עכשיו שלושה פרמטרים מהליסט הזה, כל מה שהייתי צריך לכתוב LST, ואז LST 1, ואז LST 2. כל זה אני יכול להחליף פשוט על ידי חובית LST. עכשיו בואו נניח שאנחנו רוצים לקבל פונקציה שמקבלת מספר משתנה של פרמטרים.

  36. 14:18

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

  37. 14:32

    כל מה שצריך לעשות זה פשוט להוסיף פה כוכבית בארקס, וזה אומר שבעצם אנחנו מקבלים פה מספר מסוים

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: לולאת for וגם for-else

ההרצאה הבאה: פונקציות בפייטון - חלק 2

הרצאות קשורות מקורסים אחרים

  • פונקציות למתקדמים
  • פונקציות - Functions (חלק 1)
  • פונקציות - Functions
  • פונקציות Interpolator

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי