متغیرهای محلی و سراسری (Local vs Global variables) در پایتون
در پایتون، متغیرها به دو نوع اصلی تقسیم میشوند: متغیرهای محلی و متغیرهای سراسری. تفاوت اصلی بین این دو نوع متغیر در دسترسی و محدوده استفاده آنها در برنامه است.
۱. متغیرهای سراسری (Global Variables)
متغیرهای سراسری، متغیرهایی هستند که خارج از هر تابع یا بلاک کدی تعریف میشوند و در تمام برنامه قابل دسترسی هستند. به عبارت دیگر، متغیرهای سراسری در سطح جهانی برنامه تعریف میشوند و در همه توابع و قسمتهای برنامه قابل استفادهاند.
مثال:
def print_x():
print(x)
print_x() # خروجی: 10
در این مثال، متغیر x در سطح سراسری تعریف شده است و تابع ()print_x به آن دسترسی دارد.
۲. متغیرهای محلی (Local Variables)
متغیرهای محلی، متغیرهایی هستند که در داخل یک تابع یا بلاک کدی تعریف میشوند و فقط در همان تابع یا بلاک قابل دسترسی هستند. این متغیرها پس از اتمام اجرای تابع یا بلاک از بین میروند.
مثال:
y = 20 # متغیر محلی
print(y)
print_y() # خروجی: 20
در اینجا، متغیر y فقط داخل تابع ()print_y قابل دسترسی است و خارج از آن وجود ندارد.
۳. دسترسی به متغیرهای سراسری و محلی
اگر در داخل یک تابع بخواهیم به یک متغیر سراسری دسترسی پیدا کنیم، بهراحتی میتوانیم از آن استفاده کنیم. اما اگر بخواهیم در داخل یک تابع یک متغیر جدید با همان نام متغیر سراسری تعریف کنیم، این متغیر جدید فقط در داخل همان تابع معتبر خواهد بود و متغیر سراسری تحت تاثیر قرار نمیگیرد.
مثال:
def change_x():
x = 20 # متغیر محلی با همان نام
print(f"متغیر محلی x: {x}")
change_x() # خروجی: متغیر محلی x: 20
print(f"متغیر سراسری x: {x}") # خروجی: متغیر سراسری x: 10
در این مثال، متغیر x که در داخل تابع ()change_x تعریف شده است، فقط در همان تابع قابل دسترسی است و تغییرات آن هیچ تاثیری بر روی متغیر x سراسری نخواهد داشت.
۴. استفاده از متغیر سراسری در تابع (Keyword global)
اگر بخواهیم در داخل یک تابع یک متغیر سراسری را تغییر دهیم، باید از کلمهکلیدی global استفاده کنیم. این کلمهکلیدی به پایتون اعلام میکند که متغیری که داخل تابع تغییر میدهیم، همان متغیر سراسری است، نه یک متغیر محلی جدید.
مثال:
def modify_global():
global x
x = 20 # تغییر متغیر سراسری
modify_global()
print(x) # خروجی: 20
در اینجا، با استفاده از global x، متغیر x در سطح سراسری تغییر میکند و پس از اجرای تابع مقدار آن به ۲۰ تغییر میکند.
۵. تفاوت اصلی بین متغیرهای محلی و سراسری
- متغیرهای سراسری در تمام قسمتهای برنامه قابل دسترسی هستند و در خارج از توابع نیز وجود دارند.
- متغیرهای محلی فقط در داخل توابع یا بلاکهای خاص قابل استفاده هستند و پس از اتمام اجرای آنها از بین میروند.
۶. نکات مهم
- استفاده از متغیرهای سراسری در توابع میتواند باعث بروز مشکلات و پیچیدگیهایی در برنامه شود. برای جلوگیری از این مشکلات بهتر است از متغیرهای محلی استفاده کرد.
- اگر نیاز به تغییر یک متغیر سراسری از داخل یک تابع دارید، باید از کلمهکلیدی global استفاده کنید.
مثال ترکیبی:
def test():
a = 10 # متغیر محلی
print("متغیر محلی a:", a)
def modify_global_a():
global a
a = 15 # تغییر متغیر سراسری
test() # خروجی: متغیر محلی a: 10
print("متغیر سراسری a پس از تابع test:", a) # خروجی: 5
modify_global_a()
print("متغیر سراسری a پس از تابع modify_global_a:", a) # خروجی: 15
در این مثال، متغیر a ابتدا بهصورت سراسری تعریف میشود و سپس در تابع ()test تغییر نمیکند (چرا که داخل تابع یک متغیر محلی با همین نام تعریف شده است)، اما در تابع ()modify_global_a، متغیر سراسری تغییر میکند.
