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

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

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

מקווה שזה היה ברור.
תודה!

לייק 1

היי מרווה,

דברים שחשוב לזכור על פונקציות:

  1. המילה return מסיימת את הריצה שלהן
  2. עדיף לא לעשות input/print בתוכן אלא להשתמש בפרמטרים/return במקום
  3. כשהפונקציה מפסיקה לרוץ, כל המשתנים שהיא הגדירה “מתים”.

מה שהתפספס זה כנראה סעיף 3.
אפשר לפתור את זה ע"י return לערך שאת רוצה “לייצא” מתוך הפונקציה.
מה ש־return יעשה זה “יחליף” את המקום שקרא לפונקציה שלך בערך שמופיע אחרי המילה return.

האם זה מובן ועונה לשאלה שלך?

לייק 1

הערך שחוזר, “צף באויר” וצריך לבצע השמה(משתנה = ) או פעולה (נניח print) כדי לממש/להגדיר אותו.

הבנתי נכון?

לייק 1

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

לייק 1

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

לייק 1

מצוין, רק שימי לב ש־return list_of_names זה לא מספיק.
מה שחסר זה בדיוק מה ש־@common.typo העלה: list_of_names לא מוגדרת מאליה בחוץ.
אז לדוגמה:

def inc(a):
    b = a + 1
    return b

לא ינגיש לנו את b בחוץ.
נצטרך לעשות דבר כזה כדי ש־b יהיה קיים מחוץ לפונקציה:

def inc(a):
    b = a + 1
    return b

b = inc(5)

ושימי לב שלא מדובר באותו b. באותה מידה יכולנו גם:

def inc(a):
    b = a + 1
    return b

c = inc(5)

ו־c הוא משתנה חדש שמוגדר בחוץ, כאשר b איננה מוגדרת בחוץ.

אוקיי אני חושבת שהבנתי, בזבזתי על זה שעווות.
תודה רבה!!!

היי ים,

נגיע מתישהו לדבר על scope ?

איפה זה יושב בלו"ז?

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

מאמין שסביב שבוע 6 נדבר על scoping.
המטרה היא לבסס כמה שיותר את העניין באופן אינטואיטיבי ע"י תרגול ולדבר על זה כשזה מרגיש חלק יחסית.

לייק 1

כן ממש תודה!
הצלחתי עכשיו!
תודה גם לcommon.typo

לייק 1