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 sonuc7return sarmalayan810def selamla(isim):11print(f"Merhaba, {isim}!")12return f"{isim} selamlandı"1314selamla("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 time23def 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 sonuc10return sarmalayan1113def yavaş_islem():14time.sleep(2)15return "İşlem tamamlandı"1617print(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.
0 yorum