کلیدواژه global در برنامه نویسی پایتون

4 سال پیش

کلیدواژه global در برنامه نویسی پایتون

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

کلیدواژه global در پایتون چیست؟

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

قوانین کلیدواژه global در پایتون

قوانین کلی برای کلیدواژه global در پایتون عبارتند از:

  • وقتی یک متغیر را در داخل یک تابع ایجاد می کنیم، به طور پیش فرض محلی است.
  • وقتی یک متغیر را خارج از یک تابع تعریف می کنیم، به طور پیش فرض سراسری است. لازم نیست از کلیدواژه global استفاده کنید.
  • ما برای خواندن و نوشتن متغیر جهانی در داخل یک تابع از کلیدواژه global استفاده می کنیم.
  • استفاده از کلیدواژه global در خارج از تابع هیچ تاثیری ندارد.

 

استفاده از کلیدواژه global در پایتون

مثال ۱: دستیابی به متغیر سراسری از داخل یک تابع

c = 1 # global variable

def add():
    print(c)

add()

هنگامی که برنامه فوق را اجرا می کنیم، خروجی به صورت زیر می باشد:

۱

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

 

مثال ۲: تغییر متغیر سراسری از داخل تابع 

c = 1 # global variable
    
def add():
    c = c + 2 # increment c by 2
    print(c)

add()

هنگامی که برنامه فوق را اجرا می کنیم، خروجی خطای زیر را نمایش می دهد:

UnboundLocalError: local variable 'c' referenced before assignment

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

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

مثال ۳: تغییر متغیر سراسری از داخل یک تابع با استفاده از کلیدواژه global

c = 0 # global variable

def add():
    global c
    c = c + 2 # increment by 2
    print("Inside add():", c)

add()
print("In main:", c)

هنگامی که برنامه فوق را اجرا می کنیم، خروجی به صورت زیر می باشد:

Inside add(): 2
In main: 2

در برنامه فوق، ما c را به عنوان یک کلیدواژه global در داخل تابع ()add تعریف می کنیم.

سپس، متغیر c دو تا افزایش داده می‌شود، یعنی c = c + 2. بعد از آن، تابع ()add را فراخوانی می کنیم. در آخر ، متغیر سراسری c را چاپ می کنیم.

همانطور که می بینیم ، تغییر در متغیر سراسری خارج از تابع ، ۲ = c نیز رخ داده است.

 

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

در پایتون، یک ماژول مجرد را با استفاده از config.py ایجاد می کنیم تا متغیرهای سراسری و به اشتراک‌ گذاری اطلاعات در سراسر ماژول ‌های پایتون در همان برنامه، مورد استفاده قرار می ‌گیرد.

مثال ۴: متغیر سراسری در ماژول های پایتون 

برای ذخیره متغیرهای سراسری، یک فایل config.py ایجاد کنید

a = 0
b = "empty"

یک فایل update.py برای تغییر متغیرهای محلی ساخته می ‌شود.

import config

config.a = 10
config.b = "alphabet"

یک فایل main.py برای تست تغییرات مقادیر ساخته می ‌شود.

import config
import update

print(config.a)
print(config.b)

هنگام اجرای فایل main.py، خروجی به صورت زیر خواهد بود.

۱۰
alphabet

در بالا ، ما سه فایل ایجاد کرده ایم: config.py ، update.py و main.py.

ماژول config.py متغیرهای سراسری  a و b را ذخیره می کند. در فایل update.py، ماژول config.py را وارد کرده و مقادیر a و b را اصلاح می کنیم. به همین ترتیب ، در فایل main.py، ما هر دو ماژول config.py و update.py را وارد می کنیم. در آخر، مقادیر متغیرهای سراسری چاپ و بررسی می‌شوند که آیا تغییر کرده‌اند یا اغییر نکرده اند.

متغیر سراسری در توابع تو در تو

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

مثال ۵: استفاده از یک متغیر سراسرس در تابع تو در تو

def foo():
    x = 20

    def bar():
        global x
        x = 25
    
    print("Before calling bar: ", x)
    print("Calling bar now")
    bar()
    print("After calling bar: ", x)

foo()
print("x in main: ", x)

خروجی

Before calling bar: 20
Calling bar now
After calling bar: 20
x in main: 25

در برنامه فوق، ما یک متغیر سراسری را در داخل تابع تو در تو ()bar تعریف کردیم. درون تابع foo () ،x هیچ تاثیری از کلیدواژه global ندارد.

قبل و بعد از فراخوانی ()bar، متغیر x مقدار متغیر محلی یعنی x = 20 را می گیرد. خارج از تابع ()foo، متغیر x مقدار تعریف شده در تابع نوار () یعنی x = 25 را می گیرد. این یعنی زیرا ما از کلیدواژه global در x برای ایجاد متغیر سراسری در داخل تابع ()bar  (دامنه محلی) استفاده کرده ایم.

اگر در تابع ()bar تغییری ایجاد کنیم، تغییرات خارج از محدوده محلی یعنی ()foo ظاهر می شوند.

منبع.

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

  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. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
  19. متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه