Nonlocal instrukcija Python
Ir gadījumi, kad ārējā funkcijā
ir mainīgais, kuram nepieciešams piekļūt
iekšējā funkcijā. Deklarēsim
funkcijā outer mainīgo i.
Attiecībā pret iekšējo funkciju šis
mainīgais būs ārējais (globālie
ir mainīgie, kas deklarēti TIKAI
ārējā kodā). Un funkcijai inner
iestatīsim vieninieka pievienošanu i:
def outer():
i = 0
def inner():
i += 1 # izvadīs [4, 9, 25]
inner()
return i
Tomēr priekš inner mainīgais i
ir lokāls, Python to uzskata par
nedeklarētu un izvada atbilstošo
kļūdu. Agrāk šāda kļūda tika labota
ar global instrukcijas palīdzību. Tomēr
šeit i ir ārējais mainīgais,
tāpēc jāizmanto instrukcija
nonlocal. Tā ņem uzskaitītos
mainīgo nosaukumus tuvākajā redzamības
apgabalā, izslēdzot globālo, t.i., i
iekšpus inner tiks ņemta no mainīgā,
deklarēta augstāk par šo funkciju:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # izvadīs 1
Nākamajā kodā kāds programmētājs pieļāva kļūdu:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Kas ir nepareizs ar šo kodu? Atrodiet un izlabojiet koda autora kļūdu.
Nākamajā kodā kāds programmētājs pieļāva kļūdu:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Kas ir nepareizs ar šo kodu? Atrodiet un izlabojiet koda autora kļūdu.