متغیر محلی (Local Scope) در پایتون
یک متغیر پایتون ایجاد شده در داخل یک تابع، مربوط به محدوده آن تابع است و دسترسی به آن فقط در داخل همان تابع امکان پذیر است.
مثال: در این مثال یک متغیر درون یک تابع ایجاد کرده ایم که فقط در داخل آن تابع به آن دسترسی داریم.
def myfunc():
x = 300
print(x)
myfunc()
تابعی درون تابع دیگر
همانطور که در بالا گفته شد متغیر x فقط در داخل تابع قابل دسترس است و نه خارج از آن، اما اگر در داخل آن تابع تابع دیگری داشته باشیم دسترسی به x در داخل تابع داخلی امکان پذیر است.
مثال: در این مثال یک تابع را درون تابع دیگری تعریف کرده ایم و دسترسی به تمام متغیرهای تابع بیرونی در داخل تابع داخلی امکان پذیر است.
def myfunc():
x = 300
def myinnerfunc():
print(x)
myinnerfunc()
myfunc()
دامنه سراسری یا عمومی (Global Scope) در پایتون
به متغیرهایی که در بدنه اصلی کد تعریف می شوند متغیرهای سراسری یا عمومی (Global Scope) گفته می شوند که متعلق به دامنه سراسری هستند.
این متعیرها در تمام قسمت های برنامه قابل دسترس هستند چه در دامنه محلی و چه در دامنه سراسری.
مثال: در این مثال یک متغیر در محدوده سراسری تعریف کرده ایم که در کل محدوده ها (محلی و سراسری) قابلیت دسترسی را دارند.
x = 300
def myfunc():
print(x)
myfunc()
print(x)
نام گذاری متغیرها
اگر در داخل و خارج از یک تابع در تعریف یک متغیر از یک نام یکسان استفاده کنید، پایتون آن ها را به عنوان دو متغیر جداگانه می شناسد، یکی در محدوده محلی (درون دابع) و دیگری در محدوده سراسری (خارج از تابع).
مثال: در این مثال دو متغیر هم نام ایجاد کردیم که یکی در داخل تابع (دامنه محلی) است و دیگری در خارج از نابع (دامنه سراسری) که در آن print داخل تابع همان x محلی را چاپ می کند و print خارج تابع x سراسری را چاپ می کند.
x = 300
def myfunc():
x = 200
print(x)
myfunc()
print(x)
کلمه کلیدی Global
اگر نیاز دارید که در داخل یک تابع که محدوده محلی محسوب می شود، یک متغیر در محدوده سراسری ایجاد کنید، می توانید از کلمه کلیدی Global استفاده کنید.
کلمه کلیدی Global یک متغیر در داخل محدوده محلی را به یک متغیر سراسری تبدیل می کند.
مثال: در زیر با استفاده از کلمه کلیدی Global یک متغیر سراسری در درون یک تابع تعریف کرده ایم.
def myfunc():
global x
x = 300
myfunc()
print(x)
همچنین برای تغییر در یک متغیر سراسری درون یک تابع هم می توانید از کلمه کلیدی Global استفاده کنید.
مثال: در این مثال ابتدا یک متغیر سراسری ایجاد کردیم و سپس در درون تابع با استفاده از کلمه کلیدی Global مقدار آن را تغییر داده ایم.
x = 300
def myfunc():
global x
x = 200
myfunc()
print(x)