متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون

4 سال پیش
متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون

متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، شما با متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون (Global, Local and Nonlocal variables) و مکان استفاده از آنها آشنا خواهید شد.

پیشنهاد ویژه : پکیج آموزش پایتون

متغیرهای سراسری در پایتون

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

بیایید مثالی از نحوه ایجاد یک متغیر سراسری در پایتون را ببینیم.

مثال ۱:  متغیر سراسری در پایتون

x = "global"

def foo():
    print("x inside:", x)


foo()
print("x outside:", x)

 

خروجی

x inside: global
x outside: global

 

در کد بالا، ما x را به عنوان یک متغیر سراسری ایجاد کردیم و ()foo را برای چاپ متغیر سراسری x تعریف کردیم. در آخر، ما ()foo را فراخوانی می کنیم که مقدار x را چاپ خواهد کرد.

حالا در این مثال می خواهیم مقدار x را در داخل یک تابع تغییر دهیم.

x = "global"

def foo():
    x = x * 2
    print(x)

foo()

 

خروجی

UnboundLocalError: local variable 'x' referenced before assignment

 

خروجی خطایی را نشان می دهد زیرا مفسر پایتون با x به عنوان یک متغیر محلی رفتار می کند و x نیز در داخل () foo تعریف نمی شود.

برای این کار، ما از کلیدواژه global استفاده می کنیم.

 

متغیرهای محلی در پا

یک متغیر اعلان شده در داخل بدنه تابع یا در محدوده محلی به عنوان یک متغیر محلی شناخته می شود.

 

مثال ۲: دستیابی به متغیر محلی خارج از محدوده

def foo():
    y = "local"


foo()
print(y)

 

خروجی

NameError: name 'y' is not defined

 

خروجی  خطا نشان می دهد زیرا ما در تلاش هستیم تا به یک متغیر محلی y در یک دامنه سراسری دسترسی پیدا کنیم در حالی که متغیر محلی فقط در محدوده ()foo  یا محلی کار می کند.

بیایید یک مثال در مورد نحوه ایجاد یک متغیر محلی در پایتون ببینیم.

 

مثال ۳: متغیر محلی

به طور معمول، ما یک متغیر را در داخل تابع برای ایجاد یک متغیر محلی اعلان می کنیم.

def foo():
    y = "local"
    print(y)

foo()

 

خروجی

local

 

بیایید نگاهی به مسئله قبلی بیندازیم که x یک متغیر سراسری بود و ما می خواستیم x را در ()foo مادیفای (اصلاح) کنیم.

 

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

مثال ۴: استفاده از سراسری و محلی در یک کد

x = "global "

def foo():
    global x
    y = "local"
    x = x * 2
    print(x)
    print(y)

foo()

 

خروجی

global global 
local

 

در کد بالا، x را به عنوان یک متغیر سراسری  و y را به عنوان یک متغیر محلی در ()foo اعلان می کنیم. سپس، از عملگر ضرب * برای تغییر متغیر سراسری x استفاده می کنیم و x و y را چاپ می کنیم.

بعد از فراخوانی ()foo ، مقدار x به صورت global global می شود زیرا ما از x * 2 برای چاپ دو global استفاده کردیم. بعد از آن، مقدار متغیر y یعنی متغیر محلی را چاپ می کنیم.

مثال ۵: متغیر سراسری و متغیر محلی با یک نام

x = 5

def foo():
    x = 10
    print("local x:", x)


foo()
print("global x:", x)

 

خروجی

local x: 10
global x: 5

 

در کد بالا، هم برای متغیر سراسری و هم برای متغیر محلی از نام x استفاده کردیم. وقتی متغیر مشابهی را چاپ می کنیم نتیجه متفاوتی می گیریم زیرا متغیر در هر دو دامنه اعلان می شود، یعنی هم دامنه محلی درون ()foo  و دامنه سراسری ()foo.

وقتی متغیر را درون ()foo چاپ می کنیم، خروجی به صورت local x: 10 می باشد: این دامنه محلی متغیر نامیده می شود.

به همین ترتیب، وقتی متغیر را خارج از () foo چاپ می کنیم، خروجی به صورت global x: 5 می باشد: این به دامنه سراسری متغیر گفته می شود.

متغیرهای غیر محلی در پایتون

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

از کلیدواژه nonlocal برای ایجاد متغیرهای غیر محلی استفاده می کنیم.

 

مثال ۶: متغیر غیر محلی در پایتون

def outer():
    x = "local"

    def inner():
        nonlocal x
        x = "nonlocal"
        print("inner:", x)

    inner()
    print("outer:", x)


outer()

 

خروجی

inner: nonlocal
outer: nonlocal

 

در کد بالا، یک تابع ()inner تو در تو وجود دارد. ما از کلیدواژه nonlocal برای ایجاد یک متغیر غیر محلی استفاده می کنیم. تابع ()inner در دامنه تابع ()outer تعریف می شود.

توجه: اگر مقدار یک متغیر غیر محلی را تغییر دهیم، تغییرات در متغیر محلی نیز ظاهر می شود.

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
  9. نام و دامنه در برنامه نویسی پایتون
  10. دستور شرطی if…else در برنامه نویسی پایتون
  11. حلقه for در برنامه نویسی پایتون
  12. حلقه while در برنامه نویسی پایتون
  13. دستورات break و continue در برنامه نویسی پایتون
  14. دستور pass در برنامه نویسی پایتون
  15. توابع در برنامه نویسی پایتون
  16. آرگومان تابع در برنامه نویسی پایتون
  17. تابع بازگشتی در برنامه نویسی پایتون
  18. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه