Fonksiyon decorator'ı
- Python kursu
- Orta seviye
- Ders 37/116
- 5 dk
Kendi fonksiyon decorator'ını yazmayı öğrenirsin.
Argümanlı fonksiyonları sarmak
Süsleyici, herhangi bir fonksiyonu sarabilir. Sarmalın sıfır, bir ya da daha çok parametresi olabilir. Genel çözüm: *args, **kwargs kullanarak sarmalı esnek hale getirirsin.
Örnek: def wrapper(*args, **kwargs):\n return fn(*args, **kwargs). Böylece sarmal, hangi parametreler gelirse gelsin hepsini hedefe iletir. Sabit parametreli sarmal yalnızca belirli imzalarla çalışır; bu yüzden esnek imza yaygın bir tercihtir.
Çift katmanlı yapısı
Süsleyici bir fonksiyondur ve içine başka bir fonksiyon alır. İçte yeni bir fonksiyon (sarmal) tanımlanır ve döndürülür. Yani süsleyici, fonksiyon alan ve fonksiyon döndüren bir yüksek dereceli işlev (higher-order function)'dir.
Çağrı sırası: @name görünür → name(target) çağrılır → sarmal döner → kullanıcı sarmalı çağırır → sarmal hedefi çağırır. Bu çift katman, süsleyiciye esneklik verir; parametreli süsleyicilerde üç katman bile olabilir.
Uygulama Esnek imzalı süsleyici yaz
double adında bir süsleyici tanımla. def double(fn): imzasıyla başla; içinde def wrapper(*args, **kwargs): tanımla. Sarmalın gövdesinde result = fn(*args, **kwargs) ve return result * 2 yaz. return wrapper ile bitir. @double ile def add(a, b): süsle, gövdede return a + b olsun. En son print(add(3, 4)) çağrısı yapsın.
Başlangıç kodu
# double süsleyicisini ve add fonksiyonunu yazÖrnek çözüm
# double süsleyicisini ve add fonksiyonunu yaz
def double(fn):
def wrapper(*args, **kwargs):
result = fn(*args, **kwargs)
return result * 2
return wrapper
@double
def add(a, b):
return a + b
print(add(3, 4))Beklenen çıktı
14
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sarmal imzasını tamamla
def wrapper(____, **kwargs):
return fn(*args, **kwargs)
def wrapper(*args, **kwargs):
return fn(*args, **kwargs)
Açıklama: *args konumsal argümanları toplar.
2 Süsleyici ne döndürmelidir?
- Bir liste
- Bir sınıf örneği
- Bir sayı
- Yeni bir fonksiyon Doğru cevap
Açıklama: Süsleyici, sarmalanan fonksiyon yerine geçecek yeni bir fonksiyon döndürür.
3 Süsleyici katmanlarını eşleştir
| Kavram | Anlamı |
|---|---|
def call(fn) |
Dış katman |
def wrapper(*args) |
İç katman |
return fn(...) |
Hedef çağrısı |
return wrapper |
Sarmal döndürme |