Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
714 kez görüntülendi
Decoratorler nedir? Kullanim ornekleri vereblir misiniz?
Veri Bilimi kategorisinde (857 puan) tarafından  | 714 kez görüntülendi
0 beğenilme 0 beğenilmeme

Decorator, bir fonksiyonu başka bir fonksiyonla sarıp davranışını değiştirmenin kısa yoludur.
@decorator yazmak, fonksiyon = decorator(fonksiyon) yazmakla aynıdır.
Fonksiyonun kodunu değiştirmeden loglama, cache, yetkilendirme gibi eklemeler yapmak için kullanılır.
 

def selamla_decorator(func):
    def wrapper():
        print("Önce")
        func()
        print("Sonra")
    return wrapper

@selamla_decorator
def selamla():
    print("Merhaba!")

selamla()

Sonuç:

Önce
Merhaba!
Sonra

Argümanlı decoratorler için decoratorler iç içe kullanılmalıdır:

def tekrarla(kere):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(kere):
                func(*args, **kwargs)
        return wrapper
    return decorator

@tekrarla(3)
def selam(isim):
    print(f"Selam {isim}")

selam("Mehmet")


Sonuç:

Selam Mehmet
Selam Mehmet
Selam Mehmet

Not: wrapper üstüne @functools.wraps(func) koymayı unutmayın, yoksa fonksiyonun adı kaybolur.
Hazır decorator'lar örnek şunlardır: @staticmethod, @classmethod, @property, @lru_cache.

Tek cümleyle: Decorator, "al bu fonksiyonu, bana değiştirilmiş halini ver" demenin pythonvari şeklidir.

önce (16 puan) tarafından 
20,360 soru
21,919 cevap
73,674 yorum
4,071,599 kullanıcı