Python Dekoratörler Nasıl Çalışır: Adım Adım Rehber

Dekoratör, bir fonksiyonu başka bir fonksiyonla sarmalayan Python mekanizmasıdır. Orijinal fonksiyonu değiştirmeden, onun davranışını genişletir veya değiştirir.

Dekoratör temelde şu işi yapar: bir fonksiyonu alır, onu içine alan yeni bir fonksiyon oluşturur, bazı işlemleri ekler, sonra orijinal fonksiyonu çalıştırır ve sonucu döndürür.

Basit Dekoratör Yazma

Dekoratör yazmak için iç içe fonksiyon yapısı kullanırız. Dış fonksiyon dekoratörü, iç fonksiyon ise sarmalanan işi yapar.

1def dekorator(fonksiyon):
2def sarmalayan(*args, **kwargs):
3print("Fonksiyon çalışmadan önce")
4sonuc = fonksiyon(*args, **kwargs)
5print("Fonksiyon çalıştıktan sonra")
6return sonuc
7return sarmalayan
8
10def selamla(isim):
11print(f"Merhaba, {isim}!")
12return f"{isim} selamlandı"
13
14selamla("Ahmet")

Çıktı:
```
Fonksiyon çalışmadan önce
Merhaba, Ahmet!
Fonksiyon çalıştıktan sonra
```

Burada `@dekorator` satırı, `selamla` fonksiyonunu dekoratöre geçirir. Python bunu `selamla = dekorator(selamla)` olarak yorumlar.

Pratik Örnek: Çalışma Süresi Ölçme

Gerçek hayatta dekoratörler sıkça fonksiyonun ne kadar sürede çalıştığını ölçmek için kullanılır:

1import time
2
3def sure_olc(fonksiyon):
4def sarmalayan(*args, **kwargs):
5baslama = time.time()
6sonuc = fonksiyon(*args, **kwargs)
7bitis = time.time()
8print(f"Çalışma süresi: {bitis - baslama:.4f} saniye")
9return sonuc
10return sarmalayan
11
13def yavaş_islem():
14time.sleep(2)
15return "İşlem tamamlandı"
16
17print(yavaş_islem())

Çıktı:
```
Çalışma süresi: 2.0012 saniye
İşlem tamamlandı
```

`args` ve `*kwargs` kullandığımız için dekoratör her türlü parametre alan fonksiyonla çalışır. `args` pozisyonel argümanları, `kwargs` isimli argümanları yakalar.

Dekoratörler yazılımda kod tekrarını azaltır ve fonksiyonlara ekstra özellik katmanı ekler. Loglama, yetkilendirme, veri doğrulama gibi işlerde sıkça kullanılır.

konu hakkında tepkinizi verebilirsiniz