Get Mystery Box with random crypto!

خب دوستان بریم سراغ جواب و توضیح اینکه چرا این جواب درسته جواب | بنیاد پایتون کاران فارسی

خب دوستان بریم سراغ جواب و توضیح اینکه چرا این جواب درسته
جواب درست: جواب درست این سوال میشه 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/