Python'da nonlocal Deyimi

Bazen, dış fonksiyonda iç fonksiyondan erişilmesi gereken bir değişken bulunur. outer fonksiyonunda i değişkenini tanımlayalım. İç fonksiyona göre bu değişken dış (global olanlar SADECE dış kodda tanımlanan değişkenlerdir) olacaktır. Ve inner fonksiyonuna i'ye bir ekleme görevi verelim:

pythondef outer():
  i = 0

  def inner():
    i += 1  # [4, 9, 25] çıktısını verecek

  inner()

  return i

Ancak inner için i değişkeni yerel bir değişkendir, Python onu tanımlanmamış olarak kabul eder ve ilgili hatayı verir. Eskiden böyle bir hata global deyimi kullanılarak düzeltilirdi. Ancak burada i bir dış değişkendir, bu nedenle nonlocal deyimi kullanılmalıdır. Bu deyim, listelenen değişken isimlerini global olanı hariç tutarak en yakın kapsamdan alır, yani i inner içinde, bu fonksiyondan önce tanımlanan değişkenden alınacaktır:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # 1 çıktısını verir
Задание 1

Aşağıdaki kodda bir programcı hata yapmış:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Bu kodda sorun nedir? Kod yazarının hatasını bulun ve düzeltin.

Задание 2

Aşağıdaki kodda bir programcı hata yapmış:

pythonnum = 3
def outer():
  num += 1
  tst = num

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Bu kodda sorun nedir? Kod yazarının hatasını bulun ve düzeltin.