Instruktionen nonlocal i Python

Det finns fall när en yttre funktion har en variabel som behöver nås i den inre funktionen. Låt oss deklarera variabeln i i funktionen outer. I förhållande till den inre funktionen kommer denna variabel att vara en yttre (globala variabler är de som deklareras ENDAST i den yttre koden). Och till funktionen inner lägger vi till ett till i:

pythondef outer():
  i = 0

  def inner():
    i += 1  # kommer att ge [4, 9, 25]

  inner()

  return i

Men för inner är variabeln i en lokal variabel, Python anser den odeklarerad och visar motsvarande fel. Förr åtgärdades ett sådant fel med instruktionen global. Men här är i en yttre variabel, så instruktionen nonlocal bör användas. Den tar de listade variabelnamnen till den närmaste omfånget, exklusive det globala, d.v.s. i inuti inner kommer att tas från variabeln deklarerad ovanför denna funktion:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # kommer att visa 1
Задание 1

I följande kod har en programmerare gjort ett misstag:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Vad är fel med den här koden? Hitta och rätta till programmerarens fel.

Задание 2

I följande kod har en programmerare gjort ett misstag:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Vad är fel med den här koden? Hitta och rätta till programmerarens fel.