מה יש ב- __name של (Python)?

מבוא למשתנה _ _name_ _ והשימוש בו בפייתון

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

if __name__ == '__main__': main()

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

מדוע משתמשים במשתנה _ _name_ _?

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

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

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

אילו ערכים יכול המשתנה __name__ להכיל?

כאשר אתה מריץ את הסקריפט שלך, __name__המשתנה שווה __main__. כאשר אתה מייבא את הסקריפט המכיל, הוא יכיל את שם הסקריפט.

הבה נסתכל על שני מקרי השימוש הללו ונתאר את התהליך בשתי איורים.

תרחיש 1 - הפעל את התסריט

נניח שכתבנו את התסריטnameScript.py כדלהלן:

def myFunction(): print 'The value of __name__ is ' + __name__
def main(): myFunction()
if __name__ == '__main__': main()

אם אתה מריץ nameScript.py, מתבצע התהליך הבא.

לפני הפעלת כל הקוד האחר, __name__המשתנה מוגדר ל- __main__. לאחר מכן,mainו myFunctiondef דוחות מנוהלים. מכיוון שהתנאי מוערך כנכון, נקראת הפונקציה העיקרית. זה, בתורו, מכנה את myFunction. זה מדפיס את הערך של __main__.

תרחיש 2 - ייבא את התסריט בתסריט אחר

אם אנו רוצים להשתמש מחדש ב- myFunction בסקריפט אחר, למשל importingScript.py, אנו יכולים לייבא nameScript.pyכמודול.

הקוד ב- importingScript.pyיכול להיות כדלקמן:

import nameScript as ns
ns.myFunction()

לאחר מכן יש לנו שני טווחים: אחד importingScriptמההיקף השני nameScript. באיור תראה כיצד זה שונה ממקרה השימוש הראשון.

בייבוא __name__Script.py המשתנה מוגדר ל- __main__. על ידי ייבוא ​​nameScript, פייתון מתחיל לחפש קובץ על ידי הוספה .pyלשם המודול. לאחר מכן הוא מריץ את הקוד הכלול בקובץ המיובא.

אבל הפעם זהמוגדר ל- nameScript. שוב הצהרות def עבור main ו- myFunction מנוהלות. אבל עכשיו המצב לא מוערך לשקר ועיקרי לא נקרא.

בייבוא ​​Script.py אנו קוראים ל- myFunction המפנה שםScript. NameScript ידוע ל- myFunction כאשר פונקציה זו הוגדרה.

אם הייתם מדפיסים __name__ב- ImportingScript, זה יופלט __main__. הסיבה לכך היא שפייתון משתמש בערך הידוע בהיקף importingScript.

סיכום

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