Príkaz nonlocal v Pythone

Nastávajú prípady, keď vo vonkajšej funkcii je premenná, ku ktorej je potrebné získať prístup vo vnútornej funkcii. Deklarujme vo funkcii outer premennú i. Voči vnútornej funkcii bude táto premenná predstavovať vonkajšiu (globálnymi sú premenné deklarované LEN vo vonkajšom kóde). A funkcii inner nastavme pričítanie k i jednotku:

pythondef outer():
  i = 0

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

  inner()

  return i

Avšak pre inner je premenná i lokálnou, Python ju považuje za nedeklarovanú a vypíše zodpovedajúcu chybu. Predtým sa takáto chyba riešila pomocou príkazu global. Avšak tu i je vonkajšou premennou, preto by sa mala použiť inštrukcia nonlocal. Tá vezme vymenované mená premenných do najbližšej oblasti viditeľnosti, s výnimkou globálnej, t.j. i vo vnútri inner bude braná z premennej, deklarovanej vyššie ako táto funkcia:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

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

V nasledujúcom kóde nejaký programátor urobil chybu:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Čo je zlé s týmto kódom? Nájdite a opravte chybu autora kódu.

Задание 2

V nasledujúcom kóde nejaký programátor urobil chybu:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Čo je zlé s týmto kódom? Nájdite a opravte chybu autora kódu.