Инструкцията 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())
Какво не е наред с този код? Намерете и коригирайте грешката на автора на кода.