Python-da nonlocal instruksiyasi
Elə hallar olur ki, xarici funksiyada
daxili funksiyadan çıxış etmək lazım olan
dəyişən olur. outer funksiyasında
i dəyişənini təyin edək.
Daxili funksiyaya nisbətən bu dəyişən
xarici olacaq (qlobal dəyişənlər YALNIZ
xarici koddə təyin olunan dəyişənlərdir).
inner funksiyasına isə i
dəyişəninə bir vahid əlavə etməyi təyin edək:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25] çap edəcək
inner()
return i
Lakin inner üçün i dəyişəni
lokal dəyişəndir, Python onu
təyin olunmamış hesab edir və uyğun xətanı
çap edir. Əvvəllər belə bir xəta
global instruksiyası ilə düzəlirdi.
Lakin burada i xarici dəyişəndir,
ona görə də nonlocal instruksiyasından
istifadə etmək lazımdır. O, qlobalı istisna
etməklə, ən yaxın görünmə sahəsində göstərilən
dəyişən adlarını götürür, yəni inner
daxilindəki i bu funksiyadan yuxarıda
təyin olunmuş dəyişən ilə götürüləcək:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1 çap edəcək
Aşağıdakı kodda müəyyən proqramçı səhv etmişdir:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Bu kodda nə səhvdir? Kodun müəllifinin səhvini tapın və düzəldin.
Aşağıdakı kodda müəyyən proqramçı səhv etmişdir:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Bu kodda nə səhvdir? Kodun müəllifinin səhvini tapın və düzəldin.