Udhëzimi nonlocal në Python

Ka raste kur në një funksion të jashtëm ekziston një variabël, e cila duhet të jetë e aksesueshme në funksionin e brendshëm. Le të deklarojmë në funksionin outer variablin i. Në lidhje me funksionin e brendshëm, kjo variabël do të jetë e jashtme (variablat globale janë ato të deklaruara VETËM në kodin e jashtëm). Dhe funksionit inner do t'i caktojmë shtimin e një në i:

pythondef outer():
  i = 0

  def inner():
    i += 1  # do të shfaqë [4, 9, 25]

  inner()

  return i

Megjithatë, për inner variabla i është lokale, Python e konsideron atë të padeklaruar dhe shfaq gabimin përkatës. Më parë një gabim i tillë korrigjohej duke përdorur udhëzimin global. Megjithatë, këtu i është një variabël e jashtme, prandaj duhet të përdoret udhëzimi nonlocal. Ai merr emrat e listuar të variablave në sferën më të afërt të dukshmërisë, duke përjashtuar atë globale, d.m.th. i brenda inner do të merret nga variabla e deklaruar më lart se ky funksion:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # do të shfaqë 1
Задание 1

Në kodin vijues një programist ka bërë një gabim:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Çfarë nuk shkon me këtë kod? Gjeni dhe korrigjoni gabimin e autorit të kodit.

Задание 2

Në kodin vijues një programist ka bërë një gabim:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Çfarë nuk shkon me këtë kod? Gjeni dhe korrigjoni gabimin e autorit të kodit.