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;
nonlocalbunu önler. nonlocal, çevreleyen işlev kapsamını;globalise modülü hedefler.- Değiştirilebilir bir nesneyi yerinde değiştirmek için bildirim gerekmez.
nonlocalkullanan 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
- Birinci Sınıf İşlevler
- Kapanımlar ve Serbest Değişkenler
- nonlocal ve Değiştirilebilir Durum
- Kısmi İşlevler