A nonlocal utasítás Pythonban

Előfordul, hogy a külső függvényben van egy változó, amelyhez hozzá kell férni a belső függvényben. Deklaráljunk a outer függvényben egy i változót. A belső függvény szempontjából ez a változó külsőnek számít (globálisaknak csak a külső kódban deklarált változók számítanak). A inner függvénynek pedig adjunk meg egy hozzáadást i változóhoz:

pythondef outer():
  i = 0

  def inner():
    i += 1  # Kiírja [4, 9, 25]

  inner()

  return i

Azonban a inner számára a i változó lokális, a Python nem deklaráltnak tekinti, és ennek megfelelő hibát jelez. Korábban egy ilyen hiba a global utasítással javítható volt. Azonban itt i külső változó, ezért a nonlocal utasítást kell használni. Ez a felsorolt változóneveket a legközelebbi névtereből veszi, kizárva a globálist, azaz a i a inner függvényben a függvény felett deklarált változóból lesz véve:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # Kiírja: 1
Задание 1

A következő kódban egy programozó hibát követett el:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Mi a baj ezzel a kóddal? Keresse meg és javítsa ki a kód szerzőjének hibáját.

Задание 2

A következő kódban egy programozó hibát követett el:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Mi a baj ezzel a kóddal? Keresse meg és javítsa ki a kód szerzőjének hibáját.