3.1 פונקציות שאלות ותשובות
אציף פה שאלות נפוצות על פונקציות מאנשים שלימדתי:
-
פונקציות חייבות לקבל פרמטרים?
לא -
פונקציות חייבות להחזיר ערך? (לעשות return למשהו)
לא, פונקציות יכולות לעשות return לכלום, וזה אומר שהפונקציה פשוט לא תחזיר שום ערך. -
כתבתי פונקציה שלא מחזירה ערך, חייב לעשות return?
לא, לא חייב לעשות return, אפשר פשוט לכתוב פונקציה בלי return. זה יהיה בדיוק אותו הדבר כמו לכתוב פונקציה שעושה return לכלום. -
שאני כותב תוכנה עם פונקציות, קצת קשה לי לעקוב אחרי מה שמחשב עושה, מה אני יכול לעשות?
נסה לעקוב עם האצבע שלך, ממש דמיין שאתה מתחיל בשורה 0 ועובר שורה שורה, וברגע שאתה נתקל בקריאה לפונקציה, תוזיז את האצבע שלך לשורה המתאימה, וברגע שהפונקציה חוזרת, תוזיז את האצבע שלך למקום שהייתה מקודם. -
הגדרתי את הפונקציה שלי בקובץ, ואני קורא לה בקובץ ומישום מה היא לא נקראת, פייתון לא יודע על איזה פונקציה אני מדבר. למה?
סיכוי הכי סביר שקראת לפונקציה שהגדרת אחרי, הקריאה שלה. בדיוק כמו שאיי אפשר להשתמש במשתנה שעדיין לא הגדרתם, אותו הדבר קורה עם פונקציות. קודם תגדירו את הפונקציה, ורק בשורות אחרכך תשתמשו בפונקציה, לא הפוך. -
עשיתי print, זה אומר שהפונקציה מחזירה משהו?
לא, print מדפיס למסך, לא "מחזיר" משהו. כשאנחנו אומרים "מחזיר" בקונטקסט של פונקציות, הכוונה היא שהפונקציה עושה return לערך כלשהו לשורה שהריצה אותה. -
עשיתי input, זה אומר שהפונקציה מקבלת משהו?
לא, input מבקש קלט מהמשתמש, לא "מקבל" משהו. כשאנחנו אומרים "מקבל" בקונטקסט של פונקציות, הכוונה היא שהפונקציה מקבלת פרמטרים מהשורה שהריצה אותה. -
למה כשאני מגדיר משתנים בפונקציה, אפשר לגשת אליהם רק באותה פונקציה? למה המשתנים לא שיתופיים בין פונקציות תמיד?
כל פונקציה אמורה לבצע פעולה בנפרד, הפעולה אמורה להיות לא קשורה לפונקציות שקראו לה. אם משתנים היו שיתופיים, זה היה יוצר המון באגים - דמיינו ויכלתם לכתוב פונקציה שמשנה משתנים של פונקציה אחרת, זה יכול ליצור המון דברים לא צפויים. בגלל זה הדרך היחידה שבה פונקציות אמורות לתקשר עם פונקציות אחרות זה באמצעות החזרה של ערכים מפונקציה, והעברת פרמטרים לפונקציה. -
אם אני יכול לכתוב קוד בלי פונקציות, למה שאני בתכלס אשתמש בזה?
יש המון סיבות, הנה אחת הסיבות האהובות עליי: פונקציות עוזרות לנו לכתוב תוכנות פשוטות יותר, כשאנחנו מחלקים את התוכנה שלנו לתפקידים - לפונקציות, ובמיוחד כאשר אנחנו נותנים שם לכל פעולה בתוכנה (שם לפונקציה). זה יעזור לנו לחשוב על התוכנה שלנו בצורה פשוטה יותר, זה יתן לנו את האפשרות להבין תוכנות מסובכות וארוכות של אחרים, וגם שלנו. נסו לקחת תוכנה שאתם רוצים לכתוב, לאיזה תפקידים פשוטים ומורכבים הייתם מחלקים את התוכנה?