CodeBlanks Logo Icon CodeBlanks

Fonksiyon decorator'ı

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

main.py
# double süsleyicisini ve add fonksiyonunu yaz

Örnek çözüm

main.py
# 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

Soru
def wrapper(____, **kwargs):
    return fn(*args, **kwargs)
Cevap
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

Orta seviye bölümündeki tüm dersler