Nonlocal instruktsioon Pythonis

On juhtumeid, kui välimises funktsioonis on muutuja, millele peab saama juurdepääsu sisemises funktsioonis. Deklareerime funktsioonis outer muutuja i. Sisemise funktsiooni suhtes on see muutuja väline (globaalsed on muutujad, mis on deklareeritud AINULT välimises koodis). Ja funktsioonile inner paneme ühe liitmise i-le:

pythondef outer():
  i = 0

  def inner():
    i += 1  # annab vea

  inner()

  return i

Kuid inner jaoks on muutuja i lokaalne, Python peab seda deklareerimata ja annab vastava vea. Varem parandati sellist viga instruktsiooni global abil. Kuid siin on i väline muutuja, seega tuleks kasutada instruktsiooni nonlocal. See võtab loetletud muutujanimed lähimast ulatusest, välistades globaalse, st i inner sees võetakse muutujast, mis on deklareeritud selle funktsiooni kohal:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # väljastab 1
Задание 1

Järgmises koodis tegi mõni programmeerija vea:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Mis selle koodiga on valesti? Leidke ja parandage koodi autorit viga.

Задание 2

Järgmises koodis tegi mõni programmeerija vea:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Mis selle koodiga on valesti? Leidke ja parandage koodi autorit viga.