Amri nonlocal katika Python
Kuna matukio ambayo katika kitendaji cha nje
kuna kibadilishaji ambacho kinahitaji kupatikana
katika kitendaji cha ndani. Tutaweka katika
kitendaji outer kibadilishaji i.
Kuhusiana na kitendaji cha ndani, kibadilishaji hiki
kitakuwa cha nje (kibadilishaji cha ulimwengu wote
ni vile vilivyowekwa TU
katika msimbo wa nje). Na kwa kitendaji inner
tutaweza kuongeza i moja:
def outer():
i = 0
def inner():
i += 1 # itaonyesha [4, 9, 25]
inner()
return i
Hata hivyo, kwa inner kibadilishaji i
ni cha eneo, Python inaichukulia kama
isiyowekwa na inatoa makosa yanayofanana.
Hapo awali, hitilafu kama hii ilirekebishwa
kwa kutumia amri global. Hata hivyo
hapa i ni kibadilishaji cha nje,
kwa hivyo inapaswa kutumia amri
nonlocal. Inachukua majina ya vibadilishaji
yaliyoorodheshwa kwenye eneo la karibu zaidi
la kuonekana, ukiondoa la ulimwengu wote, yaani i
ndani ya inner itachukuliwa kutoka kwa kibadilishaji
kilichowekwa hapo juu ya kitendaji hiki:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # itaonyesha 1
Katika msimbo ufuatao programu fulani alifanya makosa:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Nini kibaya na msimbo huu? Tafuta na urekebishe kosa la muandishi wa msimbo.
Katika msimbo ufuatao programu fulani alifanya makosa:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Nini kibaya na msimbo huu? Tafuta na urekebishe kosa la muandishi wa msimbo.