Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗pyPmFnNl 21 of 129 menu

Інструкцыя 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())

Што не так з гэтым кодам? Знайдзіце і выпраўце памылку аўтара кода.

byenru