Nonlocal instrukcija Python kalboje
Būna atvejų, kai išorinėje funkcijoje
yra kintamasis, prie kurio reikia gauti
prieigą vidinėje funkcijoje. Deklaruokime
funkcijoje outer kintamąjį i.
Vidinės funkcijos atžvilgiu šis kintamasis
bus išorinis (globaliais laikomi kintamieji,
deklaruoti TIK išoriniame kode). O funkcijai
inner nustatykime vieneto pridėjimą prie
i:
def outer():
i = 0
def inner():
i += 1 # išves [4, 9, 25]
inner()
return i
Tačiau inner funkcijai kintamasis i
yra lokalus, Python laiko jį
nedeklaruotu ir išveda atitinkamą
klaidą. Anksčiau tokia klaida būdavo ištaisyta
naudojant global instrukciją. Tačiau
čia i yra išorinis kintamasis,
todėl reikėtų naudoti instrukciją
nonlocal. Ji paima išvardintus
kintamųjų vardus iš artimiausios srities,
neįskaitant globalios, t.y. i
viduje inner bus paimtas iš kintamojo,
deklaruoto aukščiau šios funkcijos:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # išves 1
Toliau pateiktame kode kažkoks programuotojas padarė klaidą:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Kas negerai su šiuo kodu? Raskite ir ištaisykite kodo autoriaus klaidą.
Toliau pateiktame kode kažkoks programuotojas padarė klaidą:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Kas negerai su šiuo kodu? Raskite ir ištaisykite kodo autoriaus klaidą.