Instrukcja nonlocal w Pythonie
Zdarzają się przypadki, gdy w funkcji zewnętrznej
znajduje się zmienna, do której trzeba uzyskać
dostęp w funkcji wewnętrznej. Zadeklarujmy w
funkcji outer zmienną i.
W stosunku do funkcji wewnętrznej ta
zmienna będzie zmienną zewnętrzną (globalnymi
są zmienne zadeklarowane TYLKO
w kodzie zewnętrznym). A funkcji inner
ustawmy dodanie do i jedynki:
def outer():
i = 0
def inner():
i += 1 # wyświetli [4, 9, 25]
inner()
return i
Jednak dla inner zmienna i
jest lokalna, Python uważa ją za
niezadeklarowaną i wyświetla odpowiedni
błąd. Wcześniej taki błąd był naprawiany
za pomocą instrukcji global. Jednak
tutaj i jest zmienną zewnętrzną,
dlatego należy użyć instrukcji
nonlocal. Pobiera ona wymienione
nazwy zmiennych do najbliższego zakresu
widoczności, z wyłączeniem globalnego, czyli i
wewnątrz inner zostanie pobrana ze zmiennej,
zadeklarowanej powyżej tej funkcji:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # wyświetli 1
W następnym kodzie jakiś programista popełnił błąd:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Co jest nie tak z tym kodem? Znajdź i popraw błąd autora kodu.
W następnym kodzie jakiś programista popełnił błąd:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Co jest nie tak z tym kodem? Znajdź i popraw błąd autora kodu.