Python'дагы nonlocal инструкциясы

Кээде тышкы функцияда ички функциядан кире ала турган өзгөрмө болушу мүмкүн. outer функциясында i өзгөрмөсүн жарыялайлы. Ички функцияга карата бул өзгөрмө тышкы (глобалдык өзгөрмөлөр гана тышкы коддо жарыяланган) болот. Ал эми inner функциясына i'ге бирди кошуу милдети ыйгаралы:

pythondef outer():
  i = 0

  def inner():
    i += 1  # [4, 9, 25] чыгарат

  inner()

  return i

Бирок inner үчүн i өзгөрмөсү жергиликтүү, Python аны жарыяланбаган деп эсептеп, тиешелүү катаны чыгарат. Мурда мындай ката global инструкциясы менен оңдолчу. Бирок бул жерде i тышкы өзгөрмө, ошондуктан nonlocal инструкциясын колдонуу керек. Ал глобалдыкты эске албаганда, эң жакын көрүү аянтынан өзгөрмөлөрдүн аталыштарын алат, б.а. inner'дин ичиндеги i бул функциядан жогору жарыяланган өзгөрмө менен алынат:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # 1 чыгарат
Задание 1

Төмөнкү коддо бир программачы ката жіберді:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Бул коддо эмне туура эмес? Коддун авторунун катасын таап, оңдоп бер.

Задание 2

Төмөнкү коддо бир программачы ката жіберді:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Бул коддо эмне туура эмес? Коддун авторунун катасын таап, оңдоп бер.