Non-local değişkenler nedir?

Selamlar herkese,internette araştırma yaptım ama anlamadım tam olarak.Local ve global değişkenlerden ayrı olarak non-local değişkenler nelerdir?Ne için kullanılırlar?Ne fayda sağlarlar?Teşşekkürler

Selam,

nonlocal değişkenler, global ile local arasında kalan değişkenlerdir.

İç içe tanımlı fonksiyonlarda içteki fonksiyona göre dışta kalan fonksiyonda tanımlı bir değişken içteki fonksiyonda değiştirilmek istendiğinde kullanılır. Bu açıdan global sözcüğünün kullanımına benzer.

Başka bir ifadeyle, eğer bir fonksiyonda tanımlı bir değişkeni, o fonksiyonun içinde tanımlanmış başka bir fonksiyonda değişikliğe uğratmak istersek nonlocal ifadesini kullanırız.

Örnek: Aşağıdaki fonksiyonu çalıştırdığımızda UnboundLocalError hatası alırız.

def f():
    x = 1
    def g():
        x += 1
        print(x)
    return g()
    
    
f()

Bu hatadan kurtulmak için nonlocal ifadesine ihtiyaç duyuyoruz. Yukarıdaki kodu şu şekilde değiştirelim:

def f():
    x = 1
    def g():
        nonlocal x
        x += 1
        print(x)
    return g()
    
    
f()

Burada, nonlocal yerine global ifadesini kullanamayız, çünkü f fonksiyonu içinde tanımlanmış x, local bir değişkendir ve global alanda tanımsızdır. nonlocal yerine global yazarsanız bu kez NameError hatası alırsınız.

3 Beğeni

Öncelikle cevabınız için teşşekkür ederim.Emin olamadığım birşey var,kodunuzda x değişkeni local değişkendir dediniz.Yani nonlocal keywordu ile x’i non-local yapmadık mı?local değişkeni non-local yapabilir miyiz?

x değişkeni f fonksiyonunun scopunda tanımlı local bir değişkendir. g fonksiyonunda da tanımlıdır. Ama x değişkenini g fonksiyonunda değişikliğe uğratmak için onun g fonksiyonunda local bir değişken olmadığını belirtmek zorundayız. Bu yüzden nonlocal ifadesi ile x'i nonlocal hale getirdik.

1 Beğeni

Anladım hocam teşşekkürler :slight_smile:

1 Beğeni