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:

pythondef 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:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # izvadīs 1
Задание 1

Nākamajā kodā kāds programmētājs pieļāva kļūdu:

pythonnum = 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.

Задание 2

Nākamajā kodā kāds programmētājs pieļāva kļūdu:

pythonnum = 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.