Python-dagi nonlocal instruksiyasi
Ba'zi hollarda tashqi funksiyada
ichki funksiya tomonidan kirish imkoni bo'lishi kerak bo'lgan
o'zgaruvchi bo'ladi. Keling,
outer funksiyasida i o'zgaruvchisini
e'lon qilaylik.
Ichki funksiyaga nisbatan bu o'zgaruvchi
tashqi (global
o'zgaruvchilar faqatgina
tashqi kodda e'lon qilingan o'zgaruvchilardir) hisoblanadi. inner
funksiyasiga i ga bir qo'shish vazifasini beraylik:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25] ni chiqaradi
inner()
return i
Biroq inner uchun i o'zgaruvchisi
lokal hisoblanadi, Python uni
e'lon qilinmagan deb hisoblaydi va mos
xatolikni chiqaradi. Ilgari bunday xatolik
global instruksiyasi yordamida tuzatilgan.
Ammo
bu yerda i tashqi o'zgaruvchi hisoblanadi,
shuning uchun nonlocal
instruksiyasidan foydalanish kerak.
U ko'rsatilgan o'zgaruvchilar nomlarini globalni istisno qilgan holda,
ya'ni eng yaqin ko'rish sohasidan oladi, i
inner ichida ushbu funksiyadan yuqorida e'lon qilingan
o'zgaruvchi bilan olinadi:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1 ni chiqaradi
Quyidagi kodda ma'lum bir dasturchi xatoga yo'l qo'ydi:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Ushbu kodda nima noto'g'ri? Kod muallifining xatosini toping va tuzating.
Quyidagi kodda ma'lum bir dasturchi xatoga yo'l qo'ydi:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Ushbu kodda nima noto'g'ri? Kod muallifining xatosini toping va tuzating.