Інструкцыя nonlocal у Python
Бываюць выпадкі, калі ў знешняй функцыі
ёсць пераменная, да якой трэба атрымаць
доступ у ўнутранай функцыі. Аб'явім у
функцыі outer
пераменную i
.
Па адносінах да ўнутранай функцыі гэтая
пераменная будзе з'яўляцца знешняй (глабальнымі
з'яўляюцца пераменныя, аб'яўленыя ТОЛЬКІ
у знешнім кодзе). А функцыі inner
зададзім дадаванне да i
адзінку:
def outer():
i = 0
def inner():
i += 1 # выведзе [4, 9, 25]
inner()
return i
Аднак для inner
пераменная i
з'яўляецца лакальнай, Python лічыць яе
неаб'яўленай і выводзіць адпаведную
памылку. Раней падобная памылка выпраўлялася
з дапамогай інструкцыі global
. Аднак
тут i
з'яўляецца знешняй пераменнай,
таму варта выкарыстоўваць інструкцыю
nonlocal
. Яна бярэ пералічаныя
імёны пераменных у бліжэйшую вобласць
бачнасці, выключаючы глабальную, г.зн. i
унутры inner
будзе ўзята з пераменнай,
аб'яўленай вышэй гэтай функцыі:
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())
Што не так з гэтым кодам? Знайдзіце і выпраўце памылку аўтара кода.