Nonlocal-instruktionen i Python

Der tilfælde, hvor der i den ydre funktion er en variabel, som der skal have adgang til i den indre funktion. Lad os deklarere variablen i i funktionen outer. I forhold til den indre funktion vil denne variabel være en ekstern (globale variabler er de variabler, der kun er deklareret i den eksterne kode). Og i funktionen inner vil vi tilføje én til i:

pythondef outer():
  i = 0

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

  inner()

  return i

Men for inner er variablen i en lokal variabel, Python betragter den som udeklareret og viser en passende fejl. Tidligere blev en sådan fejl rettet ved hjælp af instruktionen global. Men her er i en ekstern variabel, så der skal bruges instruktionen nonlocal. Den tager de listede variabelnavne i den nærmeste omfang, eksklusive den globale, dvs. i inde i inner vil blive taget fra variablen, deklareret over denne funktion:

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 programmør lavet en fejl:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Hvad er der galt med denne kode? Find og ret fejlen i forfatterens kode.

Задание 2

I følgende kode har en programmør lavet en fejl:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Hvad er der galt med denne kode? Find og ret fejlen i forfatterens kode.