متغیرهای سراسری و محلی در پایتون — ساده و جامع

عکس شاخص متغیرهای سراسری و محلی در پایتون

متغیرهای سراسری «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» در داخل یک تابع تعریف می‌شود و فقط در همان تابع قابل دسترسی است.

وقتی تابع اجرا می‌شود، متغیر محلی ایجاد می‌شود و پس از پایان اجرای تابع، از بین می‌رود. این متغیرها برای ذخیره مقادیری که فقط در محدوده یک تابع مورد استفاده قرار می‌گیرند، مناسب هستند. در مجموع، تفاوت اصلی بین این دو نوع متغیر در دسترسی به آن‌هاست. متغیرهای سراسری در تمام برنامه قابل استفاده‌اند، در حالی که متغیرهای محلی فقط در همان تابع که در آن تعریف شده‌اند، معتبرند.


سوالات متداول


تفاوت متغیرهای سراسری و محلی در پایتون چیست؟

در متغیرهای سراسری، دامنه در سراسر برنامه یا اسکریپت قابل دسترسی است، از جمله تمامی توابع. تعریف خارج از هر تابع یا کلاسی تعریف می‌شوند. عمر زمانی تا پایان اجرای برنامه وجود دارند. در متغیرهای محلی، دامنه تنها در داخل تابع یا بلوکی که در آن تعریف شده‌اند قابل دسترسی هستند. تعریف داخل یک تابع یا بلوک تعریف می‌شوند. طول عمر تنها در زمان اجرای تابع وجود دارند.

چطور می‌توانیم یک متغیر سراسری را از داخل یک تابع در پایتون تغییر دهیم؟

برای تغییر یک متغیر سراسری داخل یک تابع، از کلمه کلیدی global استفاده کنید. این به پایتون می‌گوید که شما به متغیر سراسری اشاره دارید، نه اینکه یک متغیر محلی جدید بسازید.

حیطه یک متغیر محلی در پایتون چیست؟

حیطه یک متغیر محلی محدود به تابع یا بلوکی است که در آن تعریف شده است. این متغیر خارج از آن تابع یا بلوک قابل دسترسی نیست.

پایتون چطور حیطه‌های متغیرها را در توابع تو در تو مدیریت می‌کند؟

در توابع تو در تو، پایتون از قانون LEGB، محلی: متغیرهای تعریف‌شده در تابع فعلی. احاطه‌ای: متغیرهای موجود در توابع احاطه‌کننده (توابعی که در داخل یک تابع دیگر قرار دارند). سراسری: متغیرهای تعریف‌شده در سطح بالای اسکریپت یا ماژول. توکار: نام‌های توکار پایتون. برای حل حیطه‌های متغیرها استفاده می‌کند

بهترین شیوه‌ها برای استفاده از متغیرهای سراسری در پایتون چیست؟

کاهش استفاده: از متغیرهای سراسری به‌طور محدود استفاده کنید تا از مشکلات احتمالی در خوانایی و نگهداری کد جلوگیری کنید. محصورسازی: متغیرهای سراسری را درون کلاس‌ها یا ماژول‌ها محصور کنید تا حیطه آن‌ها محدود شود و وضعیت آن‌ها به‌طور مؤثرتری مدیریت شود. اجتناب از عوارض جانبی: هنگام تغییر متغیرهای سراسری از توابع یا ماژول‌های مختلف، مراقب باشید تا از عوارض جانبی غیرمنتظره جلوگیری کنید. استفاده از ثوابت: برای مقادیر غیرقابل تغییر، از ثوابت استفاده کنید و آن‌ها را با حروف بزرگ تعریف کنید تا تغییرناپذیری آن‌ها مشخص شود. مستندسازی تغییرات: جایی که و چرا متغیرهای سراسری تغییر می‌کنند را به‌وضوح مستند کنید، به‌ویژه اگر تغییرات در مکان‌های مختلف اتفاق بیفتد. تست‌گذاری: هنگام استفاده از متغیرهای سراسری، تست‌های کامل انجام دهید تا از رفتار غیرمنتظره یا اشکالات در بخش‌های مختلف برنامه جلوگیری کنید.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 0 از 0 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
مجله پی استور geeksforgeeks programiz

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

1 دیدگاه دربارهٔ «متغیرهای سراسری و محلی در پایتون — ساده و جامع»



برچسب‌ها:
پایتون


پیمایش به بالا