0Pricing
Python Academy · Ders

nonlocal ve Değiştirilebilir Durum

Kapsayan kapsamı değiştirin

nonlocal ve Değiştirilebilir Durum, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Çevreleyen değişkenleri okuma ve yazma

İç işlev, kendisini çevreleyen bir değişkeni özgürce okuyabilir; ancak bu ada atama yapmaya çalışırsa Python onu bunun yerine yeni bir yerel değişken olarak değerlendirir. Bu durum yeni başlayanları çoğu zaman şaşırtır.

def outer():
    count = 0
    def inner():
        return count
    return inner()
print(outer())

Atama tuzağı

Çevreleyen bir ada, niyetinizi belirtmeden atama yapmak onu yerel hâle getirir; bu nedenle dış değişken hiçbir zaman güncellenmez. Buradaki değişiklik kaybolur.

def outer():
    count = 0
    def bump():
        count = count + 1
    try:
        bump()
    except UnboundLocalError as e:
        print('Error:', e)
outer()

nonlocal anahtar sözcüğü

nonlocal, bir adın kendisini çevreleyen en yakın işlev kapsamındaki bir değişkene başvurduğunu bildirir. Böylece atamalar yeni bir yerel değişken oluşturmak yerine dış değişkeni günceller.

def outer():
    count = 0
    def bump():
        nonlocal count
        count += 1
    bump()
    bump()
    return count
print(outer())

Bir sayaç kapanımı

nonlocal ile durum bilgisi taşıyan bir sayaç oluşturabilirsiniz. Her çağrı, yakalanan değişkeni değiştirir ve ilerlemeyi hatırlar.

def make_counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment
c = make_counter()
print(c())
print(c())
print(c())

Bağımsız sayaçlar

Her sayaç kendi durumunu korur; çünkü her kapanım ayrı bir değişken yakalar.

def make_counter():
    count = 0
    def inc():
        nonlocal count
        count += 1
        return count
    return inc
a = make_counter()
b = make_counter()
print(a(), a(), b())

nonlocal ile global karşılaştırması

nonlocal, kendisini çevreleyen işlev kapsamını hedeflerken global modül düzeyini hedefler. Kapanımlar için nonlocal, modül genelindeki durum için global kullanın.

total = 0
def add_global(n):
    global total
    total += n
add_global(5)
add_global(3)
print(total)

nonlocal olmadan değiştirilebilir durum

Çevreleyen değer bir liste veya sözlük gibi değiştirilebilir bir nesneyse, adı yeniden bağlamadığınız için nonlocal kullanmadan onu yerinde değiştirebilirsiniz.

def make_logger():
    history = []
    def log(msg):
        history.append(msg)
        return history
    return log
log = make_logger()
log('start')
print(log('stop'))

Bir biriktirici

nonlocal ile bir kapanımı birleştirmek, her değeri hatırlanan toplama ekleyen sürekli bir biriktirici oluşturmanızı sağlar.

def make_accumulator():
    total = 0
    def add(n):
        nonlocal total
        total += n
        return total
    return add
acc = make_accumulator()
print(acc(10))
print(acc(5))
print(acc(100))

Basit bir toggle

Yerel olmayan kapsam, çağrılar arasında bir boolean durumunu değiştirmeyi kolaylaştırır.

def make_toggle():
    on = False
    def toggle():
        nonlocal on
        on = not on
        return on
    return toggle
t = make_toggle()
print(t(), t(), t())

Durumu resetleme

Aynı çevreleyen durumu paylaşan birden çok iç işlev sunabilirsiniz; örneğin bunlardan biri add, diğeri reset işlemini gerçekleştirebilir.

def make_bank():
    balance = 0
    def deposit(n):
        nonlocal balance
        balance += n
        return balance
    def reset():
        nonlocal balance
        balance = 0
        return balance
    return deposit, reset
deposit, reset = make_bank()
print(deposit(50))
print(reset())

nonlocal mevcut bir değişken gerektirir

nonlocal, adın çevreleyen bir kapsamda zaten var olmasını gerektirir; aksi takdirde Python tanımlama sırasında bir SyntaxError oluşturur. Yeni bir dış değişken oluşturamaz.

def outer():
    value = 'set'
    def inner():
        nonlocal value
        value = 'changed'
    inner()
    return value
print(outer())

Hızlı Kontrol

İç içe bir işlevin içinde, çevreleyen işlevdeki bir değişkene yeniden atama yapmak istiyorsunuz. Hangi anahtar sözcüğü kullanırsınız?

Özet: nonlocal ve Değiştirilebilir Durum

Özet:

  • Çevreleyen bir ada atama yapmak normalde yeni bir yerel değişken oluşturur; nonlocal bunu önler.
  • nonlocal, çevreleyen işlev kapsamını; global ise modülü hedefler.
  • Değiştirilebilir bir nesneyi yerinde değiştirmek için bildirim gerekmez.
  • nonlocal kullanan kapanımlar, durumu hatırlayan sayaçlar, biriktiriciler ve toggle işlevleri oluşturur.
def make_counter():
    n = 0
    def inc():
        nonlocal n
        n += 1
        return n
    return inc
c = make_counter()
print(c(), c())

Sıkça Sorulan Sorular

“nonlocal ve Değiştirilebilir Durum” dersi ücretsiz mi?

Evet — “nonlocal ve Değiştirilebilir Durum” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“nonlocal ve Değiştirilebilir Durum” dersinde ne öğreneceğim?

Kapsayan kapsamı değiştirin Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“nonlocal ve Değiştirilebilir Durum” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Birinci Sınıf İşlevler
  2. Kapanımlar ve Serbest Değişkenler
  3. nonlocal ve Değiştirilebilir Durum
  4. Kısmi İşlevler
← Python Academy Sayfasına Dön