Python-da nonlocal instruksiyasi

Elə hallar olur ki, xarici funksiyada daxili funksiyadan çıxış etmək lazım olan dəyişən olur. outer funksiyasında i dəyişənini təyin edək. Daxili funksiyaya nisbətən bu dəyişən xarici olacaq (qlobal dəyişənlər YALNIZ xarici koddə təyin olunan dəyişənlərdir). inner funksiyasına isə i dəyişəninə bir vahid əlavə etməyi təyin edək:

pythondef outer():
  i = 0

  def inner():
    i += 1  # [4, 9, 25] çap edəcək

  inner()

  return i

Lakin inner üçün i dəyişəni lokal dəyişəndir, Python onu təyin olunmamış hesab edir və uyğun xətanı çap edir. Əvvəllər belə bir xəta global instruksiyası ilə düzəlirdi. Lakin burada i xarici dəyişəndir, ona görə də nonlocal instruksiyasından istifadə etmək lazımdır. O, qlobalı istisna etməklə, ən yaxın görünmə sahəsində göstərilən dəyişən adlarını götürür, yəni inner daxilindəki i bu funksiyadan yuxarıda təyin olunmuş dəyişən ilə götürüləcək:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # 1 çap edəcək
Задание 1

Aşağıdakı kodda müəyyən proqramçı səhv etmişdir:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Bu kodda nə səhvdir? Kodun müəllifinin səhvini tapın və düzəldin.

Задание 2

Aşağıdakı kodda müəyyən proqramçı səhv etmişdir:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Bu kodda nə səhvdir? Kodun müəllifinin səhvini tapın və düzəldin.