Kapanımlar ve Serbest Değişkenler
İç işlevlerde durumu yakalayın
Kapanımlar ve Serbest Değişkenler, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. 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.
İç içe işlevler
Python, bir işlevi başka bir işlevin içinde tanımlamanıza izin verir. İç işlev, dış işlev her çalıştığında yeniden oluşturulur.
def outer():
def inner():
return 'from inner'
return inner()
print(outer())İç işlev dış değişkenleri görür
İç işlev, kendisini çevreleyen işlevde tanımlanan değişkenleri okuyabilir. Bunlara serbest değişkenler denir; çünkü iç işleve yerel değildirler.
def outer():
message = 'hello'
def inner():
return message
return inner()
print(outer())Kapanım nedir?
Bir iç işlev döndürüldüğünde ve çevreleyen kapsamındaki serbest değişkenleri, bu kapsam sona erdikten sonra bile hatırlamaya devam ettiğinde kapanım oluşur.
def make_greeter(name):
def greet():
return 'Hi ' + name
return greet
g = make_greeter('Ada')
print(g())Yakalanan durum varlığını sürdürür
Dış işlev zaten döndürülmüştür; ancak kapanım hâlâ name değerini tutar. Bu değer, döndürülen işlevin içinde varlığını sürdürür.
def make_greeter(name):
def greet():
return 'Hi ' + name
return greet
a = make_greeter('Ada')
b = make_greeter('Bob')
print(a())
print(b())Bir çarpan fabrikası
Kapanımlar, özelleştirilmiş işlevler üreten fabrikalar olarak çok kullanışlıdır. Burada döndürülen her işlev, yakalanan bir çarpanla çarpar.
def multiplier(factor):
def multiply(n):
return n * factor
return multiply
double = multiplier(2)
triple = multiplier(3)
print(double(10))
print(triple(10))Her kapanım bağımsızdır
Fabrikaya yapılan her çağrı, kendisine ait yakalanmış bir değerle ayrı bir kapanım oluşturur. Bu kapanımlar birbirlerini etkilemez.
def adder(amount):
def add(n):
return n + amount
return add
add5 = adder(5)
add100 = adder(100)
print(add5(1), add100(1))Kapanımla çevrelenmiş değerleri inceleme
Yakalanan adlar __code__.co_freevars içinde listelenir ve bunların değerleri __closure__ hücrelerinde bulunur.
def make(x):
def f():
return x
return f
fn = make(42)
print(fn.__code__.co_freevars)
print(fn.__closure__[0].cell_contents)Kapanımlar değerleri değil değişkenleri yakalar
Kapanım, değişkenin kendisini yakalar; bu nedenle değişkenin son değerini görür. Kapanım oluşturulduktan sonra değişken değişirse bu durum önem kazanır.
def build():
x = 1
def show():
return x
x = 99
return show
print(build()())Döngüde geç bağlama tuzağı
Klasik bir tuzak vardır: Bir döngüde oluşturulan kapanımların tümü aynı döngü değişkenini paylaşır; bu nedenle değişkenin son değerini yakalarlar.
funcs = []
for i in range(3):
funcs.append(lambda: i)
print([f() for f in funcs])Geç bağlamayı düzeltme
Her kapanımın tanımlandığı andaki mevcut değerin kendi kopyasını yakalaması için bu değeri bir varsayılan bağımsız değişkenle bağlayın.
funcs = []
for i in range(3):
funcs.append(lambda i=i: i)
print([f() for f in funcs])Hafif nesneler olarak kapanımlar
Kapanım, tıpkı küçük bir nesne gibi verileri davranışla bir araya getirir; basit durumlarda çoğu zaman tam bir sınıftan daha temizdir.
def counter_start(start):
def value():
return start
return value
c = counter_start(10)
print(c())Hızlı Kontrol
Python'da kapanım nedir?
Özet: Kapanımlar ve Serbest Değişkenler
Temel fikirler:
- İç işlevler, kendilerini çevreleyen kapsamdaki değişkenleri okuyabilir (serbest değişkenler).
- Kapanım, bu değişkenleri hatırlayan döndürülmüş bir iç işlevdir.
- Fabrika çağrılarının her biri bağımsız bir kapanım oluşturur.
- Kapanımlar değerleri değil değişkenleri yakalar; bu da geç bağlama döngüsü tuzağına yol açar. Bu durumu varsayılan bir bağımsız değişkenle düzeltebilirsiniz.
def power_of(exp):
return lambda base: base ** exp
square = power_of(2)
print(square(9))Sıkça Sorulan Sorular
“Kapanımlar ve Serbest Değişkenler” dersi ücretsiz mi?
Evet — “Kapanımlar ve Serbest Değişkenler” 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.
“Kapanımlar ve Serbest Değişkenler” dersinde ne öğreneceğim?
İç işlevlerde durumu yakalayın 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 2. dersidir.
“Kapanımlar ve Serbest Değişkenler” 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