Инструкција nonlocal у Пајтону

Бива случајева када у спољашњој функцији постоји променљива којој је потребан приступ у унутрашњој функцији. Декларишимо у функцији outer променљиву i. У односу на унутрашњу функцију ова променљива ће бити спољашња (глобалним променљивама сматрају се оне које су декларисане ИСКЉУЧИВО у спољашњем коду). А функцији inner задајмо додавање на i јединицу:

pythondef outer():
  i = 0

  def inner():
    i += 1  # исписаће [4, 9, 25]

  inner()

  return i

Међутим, за inner променљива i је локална, Пајтон је сматра недекларисаном и исписује одговарајућу грешку. Раније се таква грешка исправљала помоћу инструкције global. Ипак овде i је спољашња променљива, па треба користити инструкцију nonlocal. Она узима наведена имена променљивих у најближи опсег видљивости, искључујући глобални, тј. i унутар inner ће бити узета из променљиве, декларисане изнад те функције:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # исписаће 1
Задание 1

У следећем коду неки програмер је направио грешку:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Шта није у реду са овим кодом? Пронађите и исправите грешку аутора кода.

Задание 2

У следећем коду неки програмер је направио грешку:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Шта није у реду са овим кодом? Пронађите и исправите грешку аутора кода.