Die nonlocal-instruksie in Python

Daar is gevalle waar 'n veranderlike in die eksterne funksie is waartoe toegang nodig is in die interne funksie. Kom ons verklaar in funksie outer die veranderlike i. Ten opsigte van die interne funksie sal hierdie veranderlike eksterne wees (globaal is slegs veranderlikes wat verklaar is in die eksterne kode). En aan funksie inner gee ons die opdrag om een by i te tel:

pythondef outer():
  i = 0

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

  inner()

  return i

Maar vir inner is veranderlike i lokaal, Python beskou dit as onverklaard en gee die ooreenstemmende fout. Vroeër is so 'n fout reggestel met behulp van die global instruksie. Maar hier is i 'n eksterne veranderlike, dus moet ons die instruksie nonlocal gebruik. Dit neem die genoemde veranderlike name in die naaste omvang van sigbaarheid, die globale uitsluitend, d.w.s. i binne inner sal van die veranderlike geneem word wat bo hierdie funksie verklaar is:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

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

In die volgende kode het 'n sekere programmeerder 'n fout gemaak:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Wat is verkeerd met hierdie kode? Vind en regstel die outeur se fout.

Задание 2

In die volgende kode het 'n sekere programmeerder 'n fout gemaak:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Wat is verkeerd met hierdie kode? Vind en regstel die outeur se fout.