Python හි nonlocal උපදෙස
බාහිර ශ්රිතය තුළ විචල්යයක් ඇති අවස්ථා ඇත,
එයට අභ්යන්තර ශ්රිතය තුළින් ප්රවේශ විය යුතුය.
ශ්රිතයෙන් outer විචල්යය i ප්රකාශ කරමු.
අභ්යන්තර ශ්රිතයට සාපේක්ෂව මෙම විචල්යය
බාහිර (ගෝලීය වන්නේ බාහිර කේතය තුළ පමණක්
ප්රකාශ කර ඇති විචල්යයන් වේ). ශ්රිතයට
inner i වෙත එකක් එකතු කිරීමක් නියම කරමු:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25] ප්රතිදානය කරයි
inner()
return i
කෙසේ වෙතත්, inner සඳහා විචල්යය i
දේශීය වේ, Python එය ප්රකාශ නොකළ එකක් ලෙස සලකන අතර
අදාළ දෝෂය ප්රතිදානය කරයි. කලින් මෙවැනි දෝෂයක්
global උපදෙස භාවිතයෙන් නිවැරදි කරන ලදී. කෙසේ වෙතත්,
මෙහි i යනු බාහිර විචල්යයකි,
එබැවින් nonlocal උපදෙස භාවිතා කළ යුතුය.
එය ගෝලීය හැර, ආසන්නතම ප්රකාශන පරිමාණයට විචල්ය නාම
ලැයිස්තුගත කරයි, එනම් inner තුළ
i මෙම ශ්රිතයට ඉහළින් ප්රකාශ කර ඇති විචල්යයෙන් ගනු ලැබේ:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1 ප්රතිදානය කරයි
පහත කේතයේ යම් ක්රමලේඛකයෙක් දෝෂයක් සිදු කර ඇත:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
මෙම කේතයේ යම් වරදක් ඇතිද? කේතයේ කර්තෘගේ දෝෂය සොයා එය නිවරදි කරන්න.
පහත කේතයේ යම් ක්රමලේඛකයෙක් දෝෂයක් සිදු කර ඇත:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
මෙම කේතයේ යම් වරදක් ඇතිද? කේතයේ කර්තෘගේ දෝෂය සොයා එය නිවරදි කරන්න.