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())

මෙම කේතයේ යම් වරදක් ඇතිද? කේතයේ කර්තෘගේ දෝෂය සොයා එය නිවරදි කරන්න.