Takip et

Python Dekoratörleri: Nasıl Çalışırlar ve Nasıl Yazılır?

Python Dekoratörleri: Nasıl Çalışırlar ve Nasıl Yazılır?

Python’da dekoratörler, fonksiyonların davranışını değiştirmek için kullanılan güçlü bir araçtır. Fonksiyonel programlamanın temel taşlarından biri olan dekoratörler, kod tekrarını azaltır, okunabilirliği artırır ve kodun daha modüler olmasını sağlar. Bu makalede, dekoratörlerin nasıl çalıştığını ve kendi dekoratörlerinizi nasıl yazabileceğinizi adım adım açıklayacağız. Fatih Soysal olarak hazırladığım bu makalede, konuyu en ince ayrıntısına kadar ele alacağım.

Dekoratörler Nedir?

Basitçe söylemek gerekirse, bir dekoratör, bir fonksiyonu başka bir fonksiyonla “sarmak” işlemidir. Bu “sarma” işlemi, orijinal fonksiyonun çalıştırılmadan önce veya sonra ek işlemler yapmamızı sağlar. Örneğin, bir fonksiyonun çalışma süresini ölçmek, giriş verilerini doğrulamak veya hata yakalama mekanizmaları eklemek gibi işlemler için dekoratörler kullanılabilir. Sonuç olarak, dekoratörler kodumuzu daha temiz, daha okunaklı ve daha esnek hale getirir.

Dekoratörlerin Çalışma Prensibi

Bir dekoratör, aslında bir fonksiyon alan ve başka bir fonksiyon döndüren, yüksek seviye bir fonksiyondur. Bu döndürülen fonksiyon, orijinal fonksiyonu içerir ve onu istediğimiz şekilde genişletir. Aşağıdaki örnek, bu mekanizmayı daha net bir şekilde göstermektedir:


def my_decorator(func):
    def wrapper():
        print("Fonksiyon çalışmadan önce")
        func()
        print("Fonksiyon çalıştıktan sonra")
    return wrapper

@my_decorator
def say_hello():
    print("Merhaba!")

say_hello()

Bu örnekte, my_decorator fonksiyonu bir dekoratördür. say_hello fonksiyonunu süslüyor (decorate ediyor) ve onun çalıştırılmadan önce ve sonra ek işlemler yapıyor. @my_decorator satırı, say_hello fonksiyonunu my_decorator fonksiyonuna geçirmek için bir kısayoldur.

Kendi Dekoratörlerinizi Yazmak

Kendi dekoratörlerinizi yazmak oldukça basittir. Önemli olan, bir fonksiyonu alan ve başka bir fonksiyon döndüren bir fonksiyon yazmaktır. İşte birkaç ileri seviye örnek:


import time

def time_it(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"Fonksiyon {func.__name__} {end - start:.4f} saniye sürdü.")
        return result
    return wrapper

@time_it
def slow_function(n):
    time.sleep(n)
    return n*2

slow_function(2)

Bu örnekte, time_it dekoratörü, bir fonksiyonun çalışma süresini ölçer ve sonucu ekrana yazdırır. *args ve **kwargs parametreleri, dekoratörün herhangi bir sayıda pozisyonel ve keyword argümanını kabul etmesini sağlar. Ayrıca, argümanların ve keyword argümanlarının dekoratör tarafından korunmasını sağlar.

Daha karmaşık dekoratörler yazmak için, fonksiyonların argümanlarını ve dönüş değerlerini incelemek ve değiştirmek gerekebilir. Bunun için, functools.wraps dekoratörü kullanarak, orijinal fonksiyonun meta verilerini korumak önemlidir. Bu, özellikle hata ayıklama ve dokümantasyon açısından faydalıdır.

Sonuç

Python dekoratörleri, kod tekrarını azaltmak, okunabilirliği artırmak ve kodun daha modüler olmasını sağlamak için kullanılabilecek güçlü bir araçtır. Bu makalede, dekoratörlerin çalışma prensibini ve kendi dekoratörlerinizi nasıl yazabileceğinizi öğrendiniz. Daha fazla bilgi için, Python resmi dokümantasyonuna bakabilirsiniz. Umarım bu makale size yardımcı olmuştur! Daha fazla Python içeriği için web sitemi ziyaret edebilirsiniz.

#Etiketler: Python, Dekoratörler, Fonksiyonel Programlama, Python Dekoratörleri, Programlama, Kod Optimizasyonu, Yazılım Geliştirme, Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.