20 / 59

Python Variable Scope

O'zgaruvchilar ko'lami bilan tanishish

Pythonda o'zgaruvchilarni uch xil ko'lamda (scope) e'lon qilishimiz mumkin: lokal (local) ko'lam, global (global) ko'lam va nolokal (nonlocal) ko'lam.

O'zgaruvchi ko'lami — bu o'zgaruvchiga murojaat qila oladigan hududni belgilaydi. Masalan,

example.py
def add_numbers():
    sum = 5 + 4

Bu yerda, sum o'zgaruvchisi funksiya ichida yaratilgan, shuning uchun unga faqat funksiya ichida murojaat qilish mumkin (lokal ko'lam). Bunday turdagi o'zgaruvchi lokal o'zgaruvchi deb ataladi.

Ko'lamiga qarab, Python o'zgaruvchilarini uch turga ajratishimiz mumkin:

  • Lokal o'zgaruvchilar (Local Variables)
  • Global o'zgaruvchilar (Global Variables)
  • Nolokal o'zgaruvchilar (Nonlocal Variables)

Python lokal o'zgaruvchilari

O'zgaruvchilarni funksiya ichida e'lon qilganimizda, bu o'zgaruvchilar lokal ko'lamga (funksiya ichida) ega bo'ladi. Ularga funksiyadan tashqarida murojaat qila olmaymiz.

Bunday turdagi o'zgaruvchilar lokal o'zgaruvchilar deb ataladi. Masalan,

example.py
def greet():

    # lokal o'zgaruvchi
    message = 'Hello'
    
    print('Local', message)

greet()

# message o'zgaruvchisiga
# greet() funksiyasidan tashqarida murojaat qilishga urinish
print(message)

Natija

kod
Local Hello
NameError: name 'message' is not defined

Bu yerda, message o'zgaruvchisi greet() funksiyasiga lokal, shuning uchun unga faqat funksiya ichida murojaat qilish mumkin.

Shuning uchun, unga greet() funksiyasidan tashqarida murojaat qilishga urinsak, xatolikka duch kelamiz.

Bu muammoni tuzatish uchun, message nomli o'zgaruvchini global qilishimiz mumkin.

Python global o'zgaruvchilari

Pythonda funksiyadan tashqarida yoki global ko'lamda e'lon qilingan o'zgaruvchi global o'zgaruvchi deb ataladi. Bu shuni anglatadiki, global o'zgaruvchiga funksiya ichida ham, tashqarisida ham murojaat qilish mumkin.

Keling, Pythonda global o'zgaruvchi qanday yaratilishiga misolni ko'ramiz.

example.py
# global o'zgaruvchini e'lon qilish
message = 'Hello'

def greet():
    # lokal o'zgaruvchini e'lon qilish
    print('Local', message)

greet()
print('Global', message)

Natija

kod
Local Hello
Global Hello

Bu safar message o'zgaruvchisiga greet() funksiyasidan tashqarida ham murojaat qila olamiz. Buning sababi, biz message o'zgaruvchisini global o'zgaruvchi sifatida yaratganmiz.

example.py
# global o'zgaruvchini e'lon qilish
message = 'Hello'

Endi, message dasturning istalgan ko'lamidan (hududidan) foydalanish mumkin bo'ladi.

Python nolokal o'zgaruvchilari

Pythonda nonlocal kalit so'zi ichma-ich (nested) funksiyalar ichida o'zgaruvchi ichki funksiyaga lokal emasligini, balki uni o'rab turgan funksiyaning ko'lamiga tegishli ekanligini bildirish uchun ishlatiladi.

Bu sizga tashqi o'zgaruvchini global o'zgaruvchilardan alohida saqlagan holda, ichma-ich funksiya ichida tashqi funksiyaning o'zgaruvchisini o'zgartirish imkonini beradi.

example.py
# tashqi funksiya 
def outer():
    message = 'local'

    # ichma-ich (nested) funksiya  
    def inner():

        # nolokal o'zgaruvchini e'lon qilish
        nonlocal message

        message = 'nonlocal'
        print("inner:", message)

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

outer()

Natija

kod
inner: nonlocal
outer: nonlocal

Yuqoridagi misolda, ichma-ich inner() funksiyasi bor. inner() funksiyasi boshqa bir outer() funksiyasining ko'lamida e'lon qilingan.

Biz ichma-ich funksiya ichida tashqi funksiyaning message o'zgaruvchisini o'zgartirish uchun nonlocal kalit so'zidan foydalandik.

Eslatma: Agar nolokal o'zgaruvchining qiymatini o'zgartirsak, o'zgarishlar lokal o'zgaruvchida ham namoyon bo'ladi.

Ko'proq o'qing: Python Namespace and Scope

QBilimingizni sinab ko'ring
1 / 3

1. Funksiya ichida e'lon qilingan o'zgaruvchiga funksiyadan tashqarida murojaat qilish mumkinmi?