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())
რა არასწორია ამ კოდში? იპოვეთ და გამასწორეთ კოდის ავტორის შეცდომა.