خب دوستان بریم سراغ جواب و توضیح اینکه چرا این جواب درسته جواب | بنیاد پایتون کاران فارسی
خب دوستان بریم سراغ جواب و توضیح اینکه چرا این جواب درسته جواب درست: جواب درست این سوال میشه 1 دلیل : خب ریشه ی این سوال بر میگرده به بحث Scope و Namespace در پایتون
تعریف Namespace : فضای نام یا Namespace یک مجموعه از نام های نمادین به همراه یکسری اطلاعات در مورد اشیاء مربوط به اون نام ها هس که در یک دیکشنری ذخیره میشن تعریف Scope : یک محدوده ی خاصی که در آن متغیرها قابل مشاهده هستند، به عنوان scope شناخته میشن
ما در پایتون چهار نوع Namespace داریم :
1- Built-In 2- Global 3- Enclosing (non-local) 4- Local
فضای نام Built-In : این فضای نام اشاره داره به فضای نام داخلی خود پایتون فضای نام Global : این فضای نام اشاره داره به فضای نام سراسری یک ماژول فضای نام Enclosing و local به محدوده ی توابع تو در تو مربوط میشن به این صورت که اگه ما دو تابع تو در تو داشته باشیم محدوده یا scope تابع داخلی میشه Local و محدوده ی خارجی تابع داخلی، میشه Enclosing
خب حالا چرا جواب شد 1 ؟ خب ما وقتی تو بدنه ی تابع ()inner_function سعی کردیم متغیر value رو چاپ کنیم تابع ما اول میاد تو scope عه local خودش دنبال این متغیر میگرده اگه پیداش کرد پس چاپش میکنه اما اگه نبود چی؟ خب میره سراغ scope عه namespace قبل از local یعنی enclosing! به همین ترتیب پیش میره تا برسه به global وقتی میبینه تو global هس و پیداش کرد، دیگه همونجا متوقف میشه و نمیره سراغ built-in نکتهای که وجود داره این هس که اگه تو هیچ کدوم از scope عه این namespace ها نبود اون وقت میاد خطای NameError رو به ما بر میگردونه
اطلاعات بیشتر : https://realpython.com/python-namespaces-scope/