Die nonlocal-Anweisung in Python

Es gibt Fälle, in denen es in einer äußeren Funktion eine Variable gibt, auf die man in der inneren Funktion zugreifen können muss. Deklarieren wir in der Funktion outer die Variable i. In Bezug auf die innere Funktion wird diese Variable eine äußere sein (global sind nur die Variablen, die AUSSCHLIESSLICH im äußeren Code deklariert sind). Und der Funktion inner weisen wir das Addieren von eins zu i zu:

pythondef outer():
  i = 0

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

  inner()

  return i

Allerdings ist für inner die Variable i eine lokale Variable, Python betrachtet sie als undeklariert und gibt einen entsprechenden Fehler aus. Früher wurde ein solcher Fehler mit der Anweisung global behoben. Allerdings ist i hier eine äußere Variable, daher sollte die Anweisung nonlocal verwendet werden. Sie nimmt die aufgezählten Namen der Variablen aus dem nächstgelegenen Gültigkeitsbereich, ausschließlich des globalen, d.h. i innerhalb von inner wird von der Variable genommen, die oberhalb dieser Funktion deklariert wurde:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # gibt 1 aus
Задание 1

Im folgenden Code hat ein gewisser Programmierer einen Fehler gemacht:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Was ist falsch an diesem Code? Finden und korrigieren Sie den Fehler des Code-Autors.

Задание 2

Im folgenden Code hat ein gewisser Programmierer einen Fehler gemacht:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Was ist falsch an diesem Code? Finden und korrigieren Sie den Fehler des Code-Autors.