متغیرهای سراسری «global» در پایتون، متغیرهایی هستند که در هیچ تابعی تعریف نشدهاند و در کل برنامه قابل استفادهاند. اما متغیرهای محلی «Local» متغیرهایی هستند که داخل یک تابع تعریف میشوند و فقط در همان تابع قابل دسترسی هستند. به بیان دیگر، متغیرهای محلی تنها در داخل تابعی که در آن مقداردهی شدهاند، در دسترس هستند، در حالی که متغیرهای سراسری در تمام برنامه و داخل تمام توابع قابل استفادهاند. در این مقاله از مقاله های مجله پیاستور به بررسی و تعریف متغیرهای سراسری و محلی در پایتون میپردازیم.
انواع متغیرها در پایتون
متغیرها در پایتون را میتوان به دو دسته کلی سراسری «global» و محلی «Local» تقسیم کرد. متغیرهای سراسری در سطح کل برنامه تعریف میشوند و از هر نقطهای در کد، حتی داخل توابع، قابل دسترسی هستند. برای استفاده از یک متغیر سراسری درون تابع، نیازی به تعریف مجدد آن نیست، مگر اینکه بخواهید مقدار آن را تغییر دهید؛ در این صورت باید از کلمه کلیدی «global» استفاده کنید. این نوع متغیرها معمولاً برای نگهداری اطلاعاتی که در سراسر برنامه به اشتراک گذاشته میشوند، کاربرد دارند.
از سوی دیگر، متغیرهای محلی تنها در محدوده تابعی که در آن تعریف شدهاند معتبر هستند. این متغیرها به محض خروج از تابع از بین میروند و نمیتوان از آنها در خارج از تابع استفاده کرد. این نوع متغیرها با هدف جلوگیری از تداخل اطلاعات و بهبود مدیریت حافظه طراحی شدهاند. استفاده درست از متغیرهای سراسری و محلی نقش مهمی در بهینهسازی ساختار برنامه و کاهش احتمال بروز خطاهای منطقی دارد.
متغیرهای محلی در پایتون
متغیرهای محلی در پایتون متغیرهایی هستند که فقط در محدوده یک تابع تعریف و استفاده میشوند. این متغیرها در هنگام اجرای تابع مقداردهی شده و تنها در همان تابع معتبر هستند. خارج از محدوده تابع، امکان دسترسی به این متغیرها وجود ندارد. برای تعریف یک متغیر محلی، کافی است آن را درون بدنه تابع مقداردهی کنید. به این ترتیب، متغیر به صورت موقت در زمان اجرای تابع ایجاد شده و با پایان اجرای تابع از بین میرود. این ویژگی به مدیریت بهتر حافظه و جلوگیری از تداخل متغیرها کمک میکند.
ایجاد متغیرهای محلی در پایتون
برای تعریف و دسترسی به متغیرهای محلی در پایتون میتوانیم به مانند مثال زیر عمل کنیم:
def f(): # local variable s = "I love ProgramStore" print(s) # Driver code f()
خروجی:
I love ProgramStore
آیا میتوان از یک متغیر محلی خارج از یک تابع استفاده کرد؟
اگر بخواهیم از این متغیر محلی خارج از تابع استفاده کنیم، بیایید ببینیم چه اتفاقی میافتد.
def f(): # local variable g = "I love ProgramStore" print("Inside Function:", g) # Driver code f() print(g)
خروجی:
NameError: name 'g' is not defined
متغیرهای سراسری در پایتون
متغیرهای سراسری آنهایی هستند که خارج از هر تابع تعریف میشوند و در سراسر برنامه قابل دسترسی هستند، یعنی هم در داخل و هم در خارج از هر تابع. بیایید ببینیم چگونه میتوان یک متغیر سراسری در پایتون ایجاد کرد.
ایجاد یک متغیر سراسری در پایتون
برای تعریف یک متغیر سراسری، کافی است آن را خارج از هر تابعی تعریف کنید. این متغیر از هر جایی در برنامه قابل دسترسی خواهد بود.
# This function uses global variable s def f(): print("Inside Function", s) # Global scope s = "I love ProgramStore" f() print("Outside Function", s)
خروجی:
Inside Function I love ProgramStore Outside Function I love ProgramStore
متغیر s بهعنوان یک متغیر سراسری تعریف شده و هم در داخل تابع و هم در خارج از تابع استفاده میشود.
توجه: اگر متغیر محلی وجود نداشته باشد، مقدار متغیر سراسری استفاده خواهد شد. اما دقت کنید که اگر متغیر محلی و سراسری نام یکسانی داشته باشند، ممکن است تداخل ایجاد شود.
چرا از متغیرهای محلی و سراسری در پایتون استفاده میکنیم؟
حال اگر متغیری در پایتون با یک نام هم به صورت سراسری و هم در داخل یک تابع مقداردهی شود، چه اتفاقی میافتد؟
سؤالی که پیش میآید این است که آیا متغیر محلی روی متغیر سراسری تأثیری خواهد داشت یا برعکس؟
و اگر مقدار متغیر داخل تابع تغییر کند، آیا این تغییر روی متغیر سراسری نیز اعمال میشود؟
برای پاسخ به این سؤال، میتوانیم آن را با یک تکه کد آزمایش کنیم.
مثال:
اگر متغیری با همان نام در محدوده یک تابع تعریف شود، مقدار تعریفشده در داخل تابع چاپ خواهد شد و مقدار سراسری نادیده گرفته میشود.
# This function has a variable with # name same as s. def f(): s = "Me too." print(s) # Global scope s = "I love ProgramStore" f() print(s)
خروجی:
Me too. I love ProgramStore
اگر بخواهیم مقدار یک متغیر سراسری را داخل یک تابع تغییر دهیم، باید از دستور «global» استفاده کنیم. در غیر این صورت، پایتون یک متغیر محلی جدید ایجاد میکند و تغییرات فقط بر آن اثر میگذارد.
# This function uses global variable s def f(): s += 'PS' print("Inside Function", s) # Global scope s = "I love ProgramStore" f()
خروجی:
UnboundLocalError: local variable 's' referenced before assignment
برای اینکه برنامهی بالا کار کند، باید از کلمه کلیدی «global» در پایتون استفاده کنیم. این کلمه کلیدی به پایتون میگوید که متغیر مورد نظر سراسری است و تغییرات باید روی نسخه سراسری آن اعمال شود.
کلمه کلیدی global
ما فقط زمانی به کلمه کلیدی «global» در یک تابع نیاز داریم که بخواهیم متغیر سراسری را تغییر دهیم یا مقداری به آن نسبت دهیم. برای چاپ یا دسترسی به متغیر نیازی به استفاده از «global» نیست. پایتون به طور پیشفرض فرض میکند که متغیری که در داخل تابع به آن مقداردهی میشود، یک متغیر محلی است و در نتیجه اولین دستور منجر به خطا میشود. هر متغیری که در داخل یک تابع تغییر داده یا ایجاد شود، اگر به عنوان متغیر سراسری اعلام نشده باشد، محلی است. برای اینکه به پایتون بگوییم که میخواهیم از متغیر سراسری استفاده کنیم، باید از کلمه کلیدی «global» استفاده کنیم.
مثال ۱: استفاده از کلمه کلیدی «global» در پایتون
در این مثال، وقتی بخواهیم مقدار یک متغیر سراسری را در داخل تابع تغییر دهیم، باید از کلمه کلیدی «global» استفاده کنیم تا پایتون بداند که قصد داریم از متغیر سراسری استفاده کنیم و آن را تغییر دهیم.
# This function modifies the global variable 's' def f(): global s s += ' PS' print(s) s = "Look for ProgramStore Python Section" print(s) # Global Scope s = "Python is great!" f() print(s)
خروجی:
Python is great! PS Look for ProgramStore Python Section Look for ProgramStore Python Section
حالا دیگر هیچ ابهامی وجود ندارد.
مثال ۲: استفاده از متغیرهای سراسری و محلی در پایتون
در این مثال، هم از متغیر سراسری و هم از متغیر محلی استفاده میشود. متغیر محلی در داخل تابع تغییر میکند و اثر آن فقط در داخل همان تابع است، در حالی که متغیر سراسری در تمام برنامه قابل دسترسی است مگر اینکه تغییر آن در داخل تابع با استفاده از کلمه کلیدی «global» انجام شود.
a = 1 # Uses global because there is no local 'a' def f(): print('Inside f() : ', a) # Variable 'a' is redefined as a local def g(): a = 2 print('Inside g() : ', a) # Uses global keyword to modify global 'a' def h(): global a a = 3 print('Inside h() : ', a) # Global scope print('global : ', a) f() print('global : ', a) g() print('global : ', a) h() print('global : ', a)
خروجی:
global : 1 Inside f() : 1 global : 1 Inside g() : 2 global : 1 Inside h() : 3 global : 3
عمدهترین تفاوت بین متغیرهای محلی و سراسری
متغیر محلی | متغیر سراسری | مبنای مقایسه |
در داخل توابع اعلام شده لست | خارج از توابع اعلام شده است | تعریف |
آنها با شروع اجرای تابع ایجاد میشوند و با پایان یافتن تابع از بین میروند | آنها ایجاد میشوند و اجرای برنامه شروع میشود و با پایان برنامه از بین میرود | عمر زمانی |
اشتراکگذاری داده را ارائه نمیدهد | اشتراک داده را ارائه میدهد | اشتراک گذاری دادهها |
فقط میتوان به داخل تابع دسترسی داشت | در سراسر کد قابل دسترسی است | دامنه |
عبور پارامتر ضروری است | عبور پارامتر لازم نیست | پارامترهای مورد نیاز |
آنها در پشته نگهداری میشوند | یک مکان ثابت انتخاب شده توسط کامپایلر | ذخیره سازی |
یکبار تغییر متغیر روی دیگر عملکردهای برنامه تاثیری ندارد | هنگامی که مقدار تغییر میکند، در سراسر کد منعکس میشود | ارزش |
نتیجه گیری
در زبان برنامهنویسی پایتون، متغیرها به دو دستهی سراسری «global» و محلی «Local» تقسیم میشوند. متغیر سراسری «Global Variable» متغیرهایی هستند که خارج از هر تابع تعریف میشوند و در تمام برنامه قابل دسترسی هستند. به عبارت دیگر، میتوان از آنها در هر قسمت از برنامه، حتی داخل توابع نیز استفاده کرد. این متغیرها معمولاً برای ذخیرهسازی مقادیری که نیاز به دسترسی در بخشهای مختلف برنامه دارند، مناسب هستند.در مقابل، متغیر محلی «Local Variable» در داخل یک تابع تعریف میشود و فقط در همان تابع قابل دسترسی است.
وقتی تابع اجرا میشود، متغیر محلی ایجاد میشود و پس از پایان اجرای تابع، از بین میرود. این متغیرها برای ذخیره مقادیری که فقط در محدوده یک تابع مورد استفاده قرار میگیرند، مناسب هستند. در مجموع، تفاوت اصلی بین این دو نوع متغیر در دسترسی به آنهاست. متغیرهای سراسری در تمام برنامه قابل استفادهاند، در حالی که متغیرهای محلی فقط در همان تابع که در آن تعریف شدهاند، معتبرند.
عالی و دقیق