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 инструкциясын колдонуу
керек. Ал глобалдыкты эске албаганда, эң
жакын көрүү аянтынан өзгөрмөлөрдүн аталыштарын
алат, б.а. inner'дин ичиндеги i
бул функциядан жогору жарыяланган өзгөрмө
менен алынат:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1 чыгарат
Төмөнкү коддо бир программачы ката жіберді:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Бул коддо эмне туура эмес? Коддун авторунун катасын таап, оңдоп бер.
Төмөнкү коддо бир программачы ката жіберді:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Бул коддо эмне туура эмес? Коддун авторунун катасын таап, оңдоп бер.