Nonlocal инструкциясы Python-да

Сыртқы функциядағы айнымалыға ішкі функциядан қол жеткізу қажет болатын жағдайлар болады. 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())

Бұл кодта не дұрыс емес? Код авторының қатесін тауып, түзеңіз.