nonlocal-instruksjonen i Python

Det hender at det i en ytre funksjon finnes en variabel som trengs tilgang til i den indre funksjonen. La oss deklarere variabelen i i funksjonen outer. I forhold til den indre funksjonen vil denne variabelen være en ekstern (globale variabler er kun de som er deklarert i den ytre koden). Og la oss gi funksjonen inner oppgaven med å legge til én på i:

pythondef outer():
  i = 0

  def inner():
    i += 1  # vil vise [4, 9, 25]

  inner()

  return i

Men for inner er variabelen i en lokal variabel, Python anser den som udeklarert og viser en tilhørende feil. Tidligere ble en slik feil rettet ved hjelp av instruksjonen global. Men her er i en ekstern variabel, så vi bør bruke instruksjonen nonlocal. Den tar de opplistede variabelnavnene i nærmeste omfang synlighet, unntatt den globale, dvs. i inni inner vil bli tatt fra variabelen deklarert over denne funksjonen:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # vil vise 1
Задание 1

I følgende kode har en programmerer gjort en feil:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Hva er galt med denne koden? Finn og rett feilen forfatteren av koden har gjort.

Задание 2

I følgende kode har en programmerer gjort en feil:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Hva er galt med denne koden? Finn og rett feilen forfatteren av koden har gjort.