Navodila nonlocal v Pythonu

Zgodi se, da je v zunanji funkciji spremenljivka, do katere želimo dostopati v notranji funkciji. V funkciji outer deklarirajmo spremenljivko i. Za notranjo funkcijo bo ta spremenljivka zunanja (globalne so le spremenljivke, deklarirane SAMO v zunanji kodi). Funkciji inner pa dodelimo prištevanje k i ena:

pythondef outer():
  i = 0

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

  inner()

  return i

Vendar je za inner spremenljivka i lokalna, Python jo obravnava kot nedeclarirano in izpiše ustrezno napako. V preteklosti so takšno napako popravili z uporabo navodila global. Vendar tukaj je i zunanja spremenljivka, zato je treba uporabiti navodilo nonlocal. Vzame našteta imena spremenljivk v najbližji obseg vidnosti, izključujoč globalni, tj. i znotraj inner bo vzeta iz spremenljivke, deklarirane nad to funkcijo:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # izpiše 1
Задание 1

V naslednji kodi je nek programer naredil napako:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Kaj je narobe s to kodo? Poiščite in popravite avtorjevo napako.

Задание 2

V naslednji kodi je nek programer naredil napako:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Kaj je narobe s to kodo? Poiščite in popravite avtorjevo napako.