در زبان برنامه نویسی پایتون، مفهوم Scope (زمینه یا حوزه) یکی از نکات کلیدی و مهم در مدیریت دسترسی به متغیرها مشخص میشود. به طور خلاصه، Scope عبارت است از آن محدودهای از کد که در آن یک متغیر قابل استفاده و دسترس پذیر است. درک درست و منطقی از Scope میتواند شما را در مدیریت دقیقتر پروژههای پایتون و توسعه کدهای بهینهتر یاری کند.
پایتون دارای چند نوع مختلف از Scope است که عبارتاند از: Local، Enclosing، Global و Built-in. این نوعها به ترتیب اولویت دسترسی و بر اساس الگوریتم LEGB مرتب میشوند. برای مقدمه، Local ترین سطح در یک تابع تعریف میشود و به همین نسبت، Built-in که متعلق به خود پایتون است، در بالاترین سطح قرار میگیرد.
متغیرهایی که در داخل یک تابع تعریف میشوند، تنها در آن تابع قابل دسترس هستند و به آنها Local Scope گفته میشود. از طرفی، اگر متغیری در بدنه اصلی یک برنامه Python تعریف شود، این متغیر Global Scope خواهد داشت و در تمامی قسمتهای برنامه قابل دسترس خواهد بود مگر اینکه متغیری به همان اسم در Local Scope تعریف شده باشد.
برای ایجاد و استفاده صحیح از متغیرها در پایتون، باید به تفاوت بین این سطوح و رفتارشان در زمان اجرا توجه ویژهای داشت. این کار میتواند از ایجاد باگهای غیرمنتظره در برنامه جلوگیری کرده و به بهبود قابلیت نگهداری کد کمک کند.
علاوه بر این، با استفاده از کلمات کلیدی مثل global
و nonlocal
میتوانید کنترل بیشتری روی Scope متغیرها داشته باشید. بهعنوان مثال، اگر نیاز دارید مقداری را در یک تابع تغییر دهید اما آن متغیر در Global Scope تعریف شده باشد، میتوانید از global
استفاده کنید.
در نهایت، درک صحیح از این مفاهیم میتواند شما را در مسیر پیشرفت در پایتون کمک کند و باعث شود که کدهای شما سریعتر و روانتر شوند. در ادامه، یک مثال کد به همراه توضیح خطوط خواهیم داشت.
def outer_function():
x = 'local variable in outer'
def inner_function():
nonlocal x
x = 'modified by inner'
print('Inner:', x)
inner_function()
print('Outer:', x)
outer_function()
def outer_function():
این خط، تابع outer_function
را تعریف میکند که دارای یک متغیر محلی x
است.
x = 'local variable in outer'
متغیر x
در تابع outer_function
تعریف و مقداردهی اولیه شده است.
def inner_function():
تابع inner_function
داخل outer_function
تعریف شدهاست و بنابراین دارای Enclosing Scope است.
nonlocal x
این خط نشان میدهد که ما به متغیر x
از Enclosing Scope اشاره میکنیم، که همان متغیر x
در outer_function
است.
x = 'modified by inner'
در اینجا، مقدار x
در Enclosing Scope تغییر دادهشدهاست.
print('Inner:', x)
چاپ مقدار x
پس از تغییر آن در inner_function
.
inner_function()
فراخوانی تابع inner_function
.
print('Outer:', x)
چاپ مقدار x
پس از اجرای inner_function
.
outer_function()
فراخوانی تابع outer_function
برای اجرای کل فرآیند.