42 / 59

Python Namespace and Scope

Nom maydoni (Namespace) bilan tanishish

Oddiy qilib aytganda, nom maydoni (namespace) — nomlar to'plami.

Pythonda, nom maydonini biz aniqlagan har bir nomning tegishli obyektlarga moslashtirilishi sifatida tasavvur qilishimiz mumkin.

U dasturdagi o'zgaruvchilar va boshqa obyektlarning qiymatlarini saqlash va ularni muayyan nom bilan bog'lash uchun ishlatiladi.

Bu bizga kodimizning turli qismlarida turli o'zgaruvchi yoki obyektlar uchun bir xil nomdan foydalanish imkonini beradi, hech qanday to'qnashuv yoki chalkashlik yuzaga kelmasdan.

Python nom maydoni turlari

Python interpretatorini ishga tushirganimizda, barcha tayyor (built-in) nomlarni o'z ichiga olgan nom maydoni yaratiladi va interpretator ishlab turgan davomida mavjud bo'ladi.

Shu sababdan, id(), print() kabi tayyor funksiyalar dasturning istalgan qismidan bizga har doim ochiq. Har bir modul o'zining global nom maydonini yaratadi.

Bu turli nom maydonlari bir-biridan izolyatsiya qilingan. Shuning uchun, turli modullarda mavjud bo'lishi mumkin bo'lgan bir xil nom to'qnashmaydi.

Modullar turli funksiya va klasslarga ega bo'lishi mumkin. Funksiya chaqirilganda, unda aniqlangan barcha nomlarga ega lokal nom maydoni yaratiladi.

Klass bilan ham shunday holat. Quyidagi diagramma bu tushunchani aniqlashtirishga yordam berishi mumkin.

Python nom maydonlari

Python nom maydonlari

Python o'zgaruvchi ko'lami (Scope)

Turli xil noyob nom maydonlari aniqlangan bo'lsa-da, biz ularning barchasiga dasturning har bir qismidan murojaat qila olmasligimiz mumkin. Bu yerda ko'lam (scope) tushunchasi o'z o'rnini egallaydi.

Ko'lam — dasturning nom maydoniga hech qanday prefikssiz to'g'ridan-to'g'ri murojaat qilish mumkin bo'lgan qismi.

Har qanday berilgan vaqtda, kamida uchta ichma-ich ko'lam mavjud.

  1. Lokal nomlarga ega joriy funksiyaning ko'lami
  2. Global nomlarga ega modulning ko'lami
  3. Tayyor (built-in) nomlarga ega eng tashqi ko'lam

Funksiya ichida murojaat qilinganda, nom avval lokal nom maydonida, keyin global nom maydonida va nihoyat tayyor nom maydonida qidiriladi.

Agar boshqa funksiya ichida funksiya bo'lsa, lokal ko'lam ichida yangi ko'lam joylashadi.

1-misol: Pythonda ko'lam va nom maydoni

example.py
# global_var global nom maydonida
global_var = 10

def outer_function():
    #  outer_var lokal nom maydonida 
    outer_var = 20

    def inner_function():
        #  inner_var ichma-ich lokal nom maydonida 
        inner_var = 30

        print(inner_var)

    print(outer_var)

    inner_function()

# global o'zgaruvchining qiymatini chop etish
print(global_var)

# tashqi funksiyani chaqirish va lokal hamda ichma-ich lokal o'zgaruvchilarni chop etish
outer_function()

Natija

kod
10
20
30

Yuqoridagi misolda, uchta alohida nom maydoni bor: global nom maydoni, tashqi funksiya ichidagi lokal nom maydoni va ichki funksiya ichidagi lokal nom maydoni.

Bu yerda,

  • global_var - qiymati 10 bo'lgan global nom maydonida
  • outer_val - qiymati 20 bo'lgan outer_function()ning lokal nom maydonida
  • inner_val - qiymati 30 bo'lgan inner_function()ning ichma-ich lokal nom maydonida

Kod bajarilganda, avval global_var global o'zgaruvchisi chop etiladi, so'ngra tashqi va ichki funksiyalar chaqirilganda lokal o'zgaruvchilar: outer_var va inner_var chop etiladi.

2-misol: Pythonda global kalit so'zidan foydalanish

example.py
# global o'zgaruvchini aniqlash 
global_var = 10

def my_function():
    # lokal o'zgaruvchini aniqlash
    local_var = 20

    # global o'zgaruvchi qiymatini o'zgartirish 
    global global_var
    global_var = 30

# global o'zgaruvchi qiymatini chop etish
print(global_var)

# funksiyani chaqirish va global o'zgaruvchini o'zgartirish
my_function()

# global o'zgaruvchining o'zgartirilgan qiymatini chop etish
print(global_var)

Natija

kod
10
30

Bu yerda, funksiya chaqirilganda, global_var global o'zgaruvchi ekanligini bildirish uchun global kalit so'zi ishlatiladi va uning qiymati 30ga o'zgartiriladi.

Shunday qilib, kod bajarilganda, avval global_var 10 qiymati bilan chop etiladi, so'ngra funksiya chaqiriladi va global o'zgaruvchi funksiya ichidan 30ga o'zgartiriladi.

Va nihoyat, global_varning o'zgartirilgan qiymati yana chop etiladi.

Ko'proq o'qing: Python Variable Scope

QBilimingizni sinab ko'ring
1 / 3

1. Nom maydoni (namespace) nima?