Nonlocal instrukcija u Pythonu

Ponekad postoji situacija kada u spoljašnjoj funkciji postoji promenljiva kojoj je potreban pristup iz unutrašnje funkcije. Deklarišimo u funkciji outer promenljivu i. U odnosu na unutrašnju funkciju ova promenljiva će biti spoljašnja (globalne su promenljive deklarisane SAMO u spoljašnjem kodu). Funkciji inner dodelimo dodavanje jedinice na i:

pythondef outer():
  i = 0

  def inner():
    i += 1  # ispisati će [4, 9, 25]

  inner()

  return i

Međutim, za inner promenljiva i je lokalna, Python je smatra nedeklarisanom i prikazuje odgovarajuću grešku. Ranije se ovakva greška ispravljala pomoću instrukcije global. Međutim ovde i je spoljašnja promenljiva, pa treba koristiti instrukciju nonlocal. Ona uzima imenovane promenljive iz najbližeg opsega vidljivosti, isključujući globalni, tj. i unutar inner će biti uzeta iz promenljive, deklarisane iznad ove funkcije:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # ispisati će 1
Задание 1

U sledećem kodu jedan programer je napravio grešku:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Šta nije u redu sa ovim kodom? Pronađite i ispravite grešku autora koda.

Задание 2

U sledećem kodu jedan programer je napravio grešku:

pythonnum = 3
def outer():
  num += 1
  tst = num

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Šta nije u redu sa ovim kodom? Pronađite i ispravite grešku autora koda.