دستور nonlocal در زبان برنامهنویسی پایتون برای دسترسی و تغییر مقادیر متغیرهای محلی در یک تابع درون تابعها استفاده میشود. در این مقاله، به صورت کامل در مورد استفاده و نحوه عملکرد دستور nonlocal در پایتون توضیح داده میشود.
تعریف متغیرها در پایتون:
در پایتون، متغیرها میتوانند در سه حوزه مختلف تعریف شوند: حوزه سراسری (یعنی در سطح کد برنامه)، حوزه محلی (در یک تابع) و حوزه nonlocal (در توابع درون تابع). حوزه سراسری به معنی تعریف متغیرها در سطح کل برنامه است و حوزه محلی به معنی تعریف متغیرها درون یک تابع است.
دستور nonlocal در پایتون:
هنگامی که یک تابع داخلی (یعنی تابع داخل تابع) داریم و میخواهیم به متغیرهایی دسترسی داشته باشیم که در حوزه محلی تابع بیرونی تعریف شدهاند، از دستور nonlocal استفاده میکنیم. این دستور به ما اجازه میدهد تا مقادیر متغیرهایی که در حوزه محلی تابع بیرونی تعریف شدهاند، را تغییر دهیم.
نحوه استفاده از دستور nonlocal:
برای استفاده از دستور nonlocal، کافیست کلمه کلیدی nonlocal را در ابتدای تعریف متغیرها درون تابع داخلی قرار دهیم. به عنوان مثال، فرض کنید یک تابع به نام outer_function داریم و درون آن یک تابع دیگر به نام inner_function تعریف میکنیم. متغیر num درون تابع outer_function تعریف شده است و میخواهیم به آن دسترسی داشته باشیم. برای این کار، متغیر num را درون تابع inner_function با استفاده از دستور nonlocal تعریف میکنیم. سپس مقدار num را تغییر میدهیم. این تغییر مقدار num در تابع outer_function نیز اعمال خواهد شد.
مثال کد:
“`python
def outer_function():
num = 10
def inner_function():
nonlocal num
num += 5
print(“مقدار num درون تابع inner_function:”, num)
inner_function()
print(“مقدار num درون تابع outer_function:”, num)
outer_function()
“`
خروجی:
“`
مقدار num درون تابع inner_function: 15
مقدار num درون تابع outer_function: 15
“`
همانطور که در مثال بالا مشاهده میکنید، تغییر مقدار num درون تابع inner_function بر روی مقدار num درون تابع outer_function نیز تأثیر گذاشته است. این امر نشان دهنده عملکرد درست دستور nonlocal در پایتون است.
نکتههای قابل توجه:
– توجه کنید که اگر متغیری درون تابع inner_function تعریف شده باشد ولی از دستور nonlocal استفاده نکنیم، تغییری در مقدار متغیری که در تابع outer_function تعریف شده است اعمال نخواهد شد.
– اگر متغیری درون تابع inner_function تعریف نشده باشد ولی از دستور nonlocal استفاده کنیم، خطایی به نام UnboundLocalError رخ خواهد داد.
نتیجهگیری:
دستور nonlocal در پایتون به ما امکان میدهد تا به متغیرهای تعریف شده در حوزه محلی تابع بیرونی دسترسی داشته باشیم و مقادیر آنها را تغییر دهیم. این دستور بسیار مفید است و به ما اجازه میدهد تا در نوشتن کدهای پیچیدهتر و توابع درون تابعها، از قابلیتهای پیشرفتهتر پایتون بهرهبرداریم.