آموزش برنامه نویسی پایتون و AI
درک LEGB، global و nonlocal = کد بدون سورپرایز + مدیریت حرفهای متغیرها
در این جمله ، کلمه "سورپرایز" همان واژه انگلیسی Surprise به معنی "غافلگیری" یا "اتفاق غیرمنتظره" است.
در متن برنامهنویسی، منظور این است:
اگر قوانین LEGB و تفاوت global با nonlocal را به درستی متوجه نشوید، هنگام اجرای کد با خروجیهای عجیب و غیرمنتظره روبرو میشوید که دلیل آن را متوجه نمیشوید. این خروجیهای عجیب همان "سورپرایز" یا غافلگیریهای بد هستند.
✅با ما همراه باشید در 👇
https://eitaa.com/learns_py
آموزش برنامه نویسی پایتون و AI
محدوده محصور (Enclosing Scope) چیست؟
محدوده محصور به محدودهای بین دو سطح محلی و سراسری گفته میشود. زمانی رخ میدهد که یک تابع داخل تابع دیگر تعریف شده باشد – در این حالت، تابع داخلی به متغیرهای تابع خارجی دسترسی دارد و به آن متغیرها، متغیرهای محصور میگویند.
به زبان ساده: متغیرهایی که در تابع بیرونی تعریف میشوند، برای تابع داخلی "محصور" هستند.
✅با ما همراه باشید در 👇
https://eitaa.com/learns_py
آموزش برنامه نویسی پایتون و AI
قانون LEGB در پایتون مشخص میکند که وقتی به یک متغیر اشاره میکنید، مفسر پایتون به چه ترتیبی محل تعریف آن را جستجو میکند.
این قانون از اولویت بالاتر به پایینتر به این صورت است:
L → E → G → B
معنی هر حرف:
L = Local (محلی)
اولین جایی که پایتون نگاه میکند، همان تابع یا محدوده محلی است.
مثال: متغیری که داخل تابع فعلی تعریف کردهاید.
E = Enclosing (محصور)
اگر در تابع محلی پیدا نشد، پایتون به سراغ توابع بیرونیتر (توابعی که تابع فعلی داخل آنها قرار دارد) میرود.
این فقط در توابع تودرتو معنی دارد.
G = Global (سراسری)
اگر در توابع محلی و محصور پیدا نشد، پایتون به سطح سراسری برنامه (خارج از همه توابع) نگاه میکند.
B = Built-in (ساختهشده)
در آخرین مرحله، پایتون به دنبال متغیر در توابع و متغیرهای داخلی خود پایتون میگردد (مثل print، len، range).
اگر اینجا هم نباشد، خطای NameError میدهد.
✅با ما همراه باشید در 👇
https://eitaa.com/learns_py