Python даги nonlocal инструкцияси
Ташқи функцияда
ички функция томонидан кириш учун зарур бўлган
ўзгарувчи бўлган ҳоллар мавжуд. Функцияда
outer ўзгарувчисини i э'лон қиламиз.
Ички функцияга нисбатан бу ўзгарувчи
ташқи (глобал бўлган ўзгарувчилар фақат
ташқи кодда э'лон қилинган) бўлади. Ва inner
функциясига i га биттани қўшиш вазифасини
берамиз:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25] ни кўрсатади
inner()
return i
Аммо inner учун i ўзгарувчиси
локал бўлиб, Python уни э'лон қилинмаган
ҳисоблайди ва мос хатоликни кўрсатади.
Илгари бундай хатолик global инструкцияси
орқали тўғриланган. Аммо
бу ерда i ташқи ўзгарувчи бўлгани учун,
nonlocal инструкциясини ишлатиш керак.
У глобалдан ташқари, яъни i
inner ичида ушбу функциядан юқорида э'лон қилинган ўзгарувчидан олинади:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1 ни кўрсатади
Куйидаги кодда бир программист хатолik қилган:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Бу кодда нима хато? Код муаллифининг хатосини топинг ва тўғриланг.
Куйидаги кодда бир программист хатолik қилган:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Бу кодда нима хато? Код муаллифининг хатосини топинг ва тўғриланг.