Amri nonlocal katika Python

Kuna matukio ambayo katika kitendaji cha nje kuna kibadilishaji ambacho kinahitaji kupatikana katika kitendaji cha ndani. Tutaweka katika kitendaji outer kibadilishaji i. Kuhusiana na kitendaji cha ndani, kibadilishaji hiki kitakuwa cha nje (kibadilishaji cha ulimwengu wote ni vile vilivyowekwa TU katika msimbo wa nje). Na kwa kitendaji inner tutaweza kuongeza i moja:

pythondef outer():
  i = 0

  def inner():
    i += 1  # itaonyesha [4, 9, 25]

  inner()

  return i

Hata hivyo, kwa inner kibadilishaji i ni cha eneo, Python inaichukulia kama isiyowekwa na inatoa makosa yanayofanana. Hapo awali, hitilafu kama hii ilirekebishwa kwa kutumia amri global. Hata hivyo hapa i ni kibadilishaji cha nje, kwa hivyo inapaswa kutumia amri nonlocal. Inachukua majina ya vibadilishaji yaliyoorodheshwa kwenye eneo la karibu zaidi la kuonekana, ukiondoa la ulimwengu wote, yaani i ndani ya inner itachukuliwa kutoka kwa kibadilishaji kilichowekwa hapo juu ya kitendaji hiki:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # itaonyesha 1
Задание 1

Katika msimbo ufuatao programu fulani alifanya makosa:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Nini kibaya na msimbo huu? Tafuta na urekebishe kosa la muandishi wa msimbo.

Задание 2

Katika msimbo ufuatao programu fulani alifanya makosa:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Nini kibaya na msimbo huu? Tafuta na urekebishe kosa la muandishi wa msimbo.