Python dilinde decorator fonksiyonları nasıl kullanılır? Decorator fonksiyon kullanarak kodunuzu nasıl daha etkili hale getirebilirsiniz? Örneklerle anlatıyoruz Bu yazıyı okuyarak Python decorator fonksiyonları konusunda kendinizi geliştirebilirsiniz

Python'da decorator fonksiyonlarının kullanımı, fonksiyonlar üzerinde yapılan değişiklikleri veya ek işlevleri kolayca eklemek için kullanılan bir tekniktir.
Decorator fonksiyonlar, bir fonksiyonu girdi olarak alarak bu fonksiyonu değiştirir veya geliştirir. Decorator'ların çoğu bir fonksiyona ek özellikler ekler veya o fonksiyonu değiştirirken, bazıları ise fonksiyonu hiç değiştirmeden sadece işlevsel yanlarını değiştirirler.
Python'daki decorator fonksiyonlarının kullanımı oldukça yaygın hale geldi ve özellikle büyük proje geliştirme süreçlerinde çok işlevsel olan bu teknik sayesinde kodların okunabilirliği ve yeniden kullanılabilirliği arttırılmaktadır.
Decorator fonksiyonları, genel olarak "@ " işaretiyle bir araya getirilir ve fonksiyonların tanımlanmasını sağlar.
Bir decorator fonksiyonu, bir fonksiyonu süslemek veya dekore etmek için kullanılabilir. Decorator fonksiyonu, ilgili fonksiyonu parametre olarak alır ve bu fonksiyonu değiştirir veya geliştirir. Bu sayede, kodun açıklık ve okunabilirliği artar.
Decorator fonksiyonlarının kullanımı oldukça kolaydır ve Python'daki çoğu fonksiyon ve method bu konuda destek sağlamaktadır. Yüksek seviyeli programlama dillerinde decorator fonksiyonları sıklıkla karşılaşılan bir yapıdır.
Temel Decorator Fonksiyonları
Python'da decorator fonksiyonlarının kullanımı oldukça yaygındır. Decorator fonksiyonları, bir fonksiyonu değiştirmek yerine, mevcut bir fonksiyon veya sınıfın üzerine ek özellikler ekleyen özel bir fonksiyondur. Temel decorator fonksiyonları şunlardır:
- @staticmethod: Bu decorator, bir sınıfın belirli bir metodunun, nesnelerin örneği olmaksızın çağrılabilmesini sağlar. Yani bu metod, sınıfa ve nesneye özel değildir. Statik metodlar, sınıfın özelliklerini kullanmadan bir fonksiyonun yürütülmesine izin verir. Örnek olarak, bir hesap makinemiz olduğunu varsayalım ve pi sayısını kullanarak çemberin alanını hesaplamak istiyoruz. Bu durumda, pi'yi kullanabilmemiz için her defasında sistemin yeniden başlatılmasını istemeyiz. Bu nedenle statik metodlar önemli hale gelir.
- @classmethod: Sınıfta kullanılan herhangi bir metodun ilk parametresi "cls" olarak adlandırılır. Bu metod kullanarak, sınıfın niteliklerine erişebilirsiniz. Bu decorator, statik metoda benzemekle birlikte, sınıfın kendisine özgü nitelikler üzerinde çalışır. Özellikle, classmethod, bir sınıfın bir metodunun içinde belirlenmiş diğer sınıflardan yeni objeler oluşturulmasını kolaylaştırmak için kullanılır. Bu özellik programlama dili içinde özellikle önemli bir konuma sahiptir.
- @property: Bu decorator, özellikle sınıfın niteliklerine erişmek için kullanılır. Bu özellik, niteliklerin değerlerindeki bir değişikliği izlemenizi sağlar. Özellikle, bir sinif üzerindeki bazı niteliklerin sürekli olarak değiştirilmesi durumunda, bu değişiklikleri takip etmek için @property kullanılabilir.
Bu decorator fonksiyonları, Python'daki bir çok proje tarafından sıklıkla kullanılır. Bu nedenle, bu fonksiyonların anlaşılması ve kullanılması büyük önem taşır. Biraz pratiğin ardından, bu decorator fonksiyonları kullanarak kod yazarken çok daha kolay bir şekilde ilerleyebilirsiniz.
@staticmethod
@staticmethod işlevi Python programlama dilindeki statik metodların tanımıdır. Statik metodlar sınıfın bir örneği olmadan kullanılabilen metodlardır. Yani sınıf örneği olmadan bir sınıf metodu çağrılabilir. Bu metodlar sadece sınıf adı vasıtasıyla çağrılabilir ve sınıfın bir örneğiyle çalışmaz.
Statik metotların kullanımı, fonksiyonlarda yapılan işlemleri genellikle sınıf düzeyinde yapmak istediğimizde kullanışlıdır. Örneğin, sınıfın bir örneği olmadan, matematiksel hesaplamalar yapmak gibi işlemler yapılabilir.
Bir başka önemli özellik, statik fonksiyonların, bir sınıfın bir örneği için veya herhangi bir sınıf örneği için kullanılabilmesidir. Ayrıca, statik metodların, sınıfların kullanıcılarının ana programını daha kolay anlamasına yardımcı olacak şekilde organize etmeleri için kullanıcılara da avantaj sağladığı bilinmektedir.
Özetle, @staticmethod fonksiyonu, istatistikler vb. gibi bir sınıfa ait bir fonksiyon için uygun bir çözüm sunar. Bu metotlar, sınıfın örneği olmadan kullanılabilen metodlardır ve genellikle programlama dillerinde bulunan diğer statik fonksiyon türleriyle benzer olarak çalışır.
Metodlar ve Statik Metodlar Arasındaki Farklar
Metodlar, genellikle sınıfların özelliklerine bağlı olan ve sınıfın öğeleri üzerinde çalışan fonksiyonlardır. Bu nedenle, sınıfın öğesi olmadan metod işlevsiz hale getirilir. Bir örnekle, bir araba sınıfında, sürücüye özel bir hız kontrol sistemi yöntemi, bir sürücü nesnesinin varlığına bağlıdır. Bu nedenle, bir sınıf metodunu çağırmak için bir sınıf örneği oluşturmak zorundasınız.
Statik metodlar, sınıfın öğelerine bağımlı olmayan ve sınıf nesnesi veya örnek yöntemi olmadan çağrılabilen fonksiyonlardır. Yani, nesneye veya sınıfa özgü bir şey kullanmadan bağımsız bir fonksiyon gibi çalışır. Aynı araba örneğinde, örneğin araba üreticisi ve arabanın modeli statik niteliklere örnektir. Bu nedenle, statik metodlar aracılığıyla, farklı araba örnekleri oluşturmanıza gerek olmadan, tüm arabalar için üretici ve model bilgilerini alabilirsiniz.
Bu fark nedeniyle, statik metodlar, sınıf örneklerinden bağımsız çalışabilen işlevsellikler için idealdir. Ayrıca, programın sınıflarındaki kod tekrarını da azaltır. Sınıfların ve metodların kullanım örnekleri incelendikten sonra, statik metodların işlevselliği ve kullanımı daha kolay bir şekilde anlaşılabilir.
Örnek Bir @staticmethod
Bir @staticmethod örneği vermek gerekirse, bir öğrencinin not ortalamasını hesaplamaya çalışalım. Bu örnekte, statik metod, öğrencinin notlarını girebileceği bir dizi kullanarak ortalamayı hesaplayacaktır.
İşte örnek kod:
class Ogrenci: def __init__(self, isim, notlar): self.isim = isim self.notlar = notlar @staticmethod def not_ortalama(notlar): return sum(notlar) / len(notlar)ogrenci1 = Ogrenci("Ali", [60, 70, 80])ogrenci2 = Ogrenci("Mehmet", [75, 85, 90])print(Ogrenci.not_ortalama(ogrenci1.notlar))print(Ogrenci.not_ortalama(ogrenci2.notlar))
Bu örnekte, Ogrenci sınıfı, öğrenci adını ve notlarını içeren bir liste oluşturmak için bir init () metodu kullanır. not_ortalama () adlı bir statik metot ise, öğrencinin notlarını hesaplamak için kullanılır. Bu örnek kod, ogrenci1 ve ogrenci2 için not ortalamalarının nasıl hesaplandığını göstermektedir.
@classmethod
Python'da, bir sınıfın örneği olmadan da çalışabilen metotlar için @classmethod kullanılır. Bu, sınıfın özelliklerine erişmeyi sağlayan bir önceliktir.
@classmethod, sınıfın kendisine ve örneklere ait olmayan bir metoda sahip olmayı sağlar. Metot, sınıfın kendisinde tanımlandığından, örneğin özelliğine veya metoduna erişebilir.
@classmethod Özellikleri | Açıklama |
---|---|
Sınıfın kendisine erişebilme olanağı | @classmethod yapılandırıcısı kullanarak sınıfın kendisi üzerinde işlem yapma imkanı sağlar. |
Sınıf özelliklerine erişebilme yeteneği | classmethod, sınıfın özelliklerine ve örnek değişkenleri olmadan erişebilir. |
@classmethod, değişkenlerden kaçınmak ve sınıfın özelliklerine erişmek için iyi bir yoldur. Örneğin, birkaç öğrencinin not ortalamasını hesaplamak istiyoruz. @classmethod, bu işlemi kolaylaştırır.
Örneğin:
```class Ogrenci: def __init__(self, ad, soyad, notlar): self.ad = ad self.soyad = soyad self.notlar = notlar @classmethod def not_ortalamasi(cls, adet, *notlar): toplam = sum(notlar) ortalama = toplam / adet return cls(f'Not Ortalaması: {ortalama:.2f}')```Not ortalamasını hesaplamak için @classmethod kullandık. "cls" anahtar kelimesini kullanarak, Ogrenci sınıfını temsil ediyoruz. Statik metoda benzer şekilde, @classmethod bir sınıfın özelliği olacaktır.
- Ogrenci.not_ortalamasi(3, 90, 85, 95)
- Ogrenci.not_ortalamasi(5, 78, 89, 90, 87, 94)
yukarıdaki kod örneğinde, not_ortalamasi() sınıfın kendisinde tanımlanır ve sınıfının özelliklerine erişebilir.
Bu sadece bir örnek. İhtiyacınıza göre, @classmethod'ın sınıflarınızda ne kadar yararlı olabileceğini keşfedebilirsiniz.
Örnek Bir @classmethod
Bir @classmethod, sınıfın bütün örneklerine değil de sınıfa özgü bir özelliğinin düzenlenmesi veya kullanılması durumunda kullanılır.
Bir örnekle açıklamak gerekirse, öğrenci adı, soyadı ve not ortalamaları için bir sınıf düşünelim. Bu sınıfta, öğrencilerin toplam not ortalamalarını hesaplayacak ve sınıfta kaç öğrenci olduğunu döndürecek bir @classmethod yazabiliriz.
İlk olarak, sınıf değişkenleri tanımlanmalıdır. Bu sınıf değişkenleri, sınıfa ve tüm öğrencilere ait verileri içerecektir. Sınıf değişkenleri, sınıf içinde herhangi bir yerde kullanılabilecektir.
``` pythonclass Ogrenci: ogrenci_sayisi = 0 toplam_not = 0 def __init__(self, ad, soyad, not_ortalamasi): self.ad = ad self.soyad = soyad self.not_ortalamasi = not_ortalamasi Ogrenci.ogrenci_sayisi += 1 Ogrenci.toplam_not += not_ortalamasi @classmethod def sinif_bilgileri(cls): return f"Sınıfta {cls.ogrenci_sayisi} öğrenci var ve ortalamaları {cls.toplam_not / cls.ogrenci_sayisi}"```Yukarıdaki kod, `Ogrenci` adlı sınıftaki @classmethod örneğidir. Bu sınıf içerisinde, `ogrenci_sayisi` ve `toplam_not` adında iki sınıf değişkeni tanımlandı. Daha sonra bir `__init__` metodunda, ad, soyad ve not ortalama bilgileri eklendi. Burada dikkat etmemiz gereken şey, `ogrenci_sayisi` ve `toplam_not` değişkenlerinin her seferinde güncellenmesi gerektiğidir.
`sinif_bilgileri` adında bir @classmethod eklendi. Bu özellik, sadece sınıfa erişebilme yeteneğiyle birlikte, diğer yerlerde erişemediğimiz sınıf değişkenlerine de erişebilir.
Sonuç olarak, her öğrenci objesi oluşturulduğunda, `ogrenci_sayisi` 1 artacak ve `toplam_not` sınıf değişkeni öğrencilerin not ortalamalarını toplayacaktır. Bu sayede `sinif_bilgileri` işlevi, sınıf özelliklerini kullanarak öğrenci sayısı ve not ortalamasını hesaplayacaktır.
@property
Python'da property bir veri niteliği olarak kullanılabilen bir özelliktir. Property'nin amacı, sınıflara ekstra işlevsellik sağlamaktır. Bir property, nesnelerdeki herhangi bir niteliğe benzer bir şekilde çalışır. Ancak, bir property'in farkı, ona erişmenin veya onu değiştirmenin birkaç yolu olabileceğidir. Property, veri saklama ve işleme yöntemlerini kapsülleme ya da örtme olanağı sunar.
Örneğin, property kullanarak bir sınıfın nesnesindeki bir niteliğe erişerek veya niteliği değiştirerek özet bilgi verilebilir. Bu özellikle, programlama etrafı geniş olan projelerde projenin boyutunu azaltmak ve bulundurmaya çalışmak zor olan birçok niteliği tek bir yapıda tutarak erişilebilir hale getirmek mümkündür.
A property'nin içindeki kodlar tanımlanabilen bir metod kullanır ve Get (), Set () ve Delete () metodlarını içerir. Get () methodunun amacı gelen verileri saklamak ve ulaşılmasını sağlamaktır ve Set () methodu bu saklanılan veriyi değiştirirken Delete () methodu ise öğeyi silmek için kullanılır.
Ayrıca, property'nin bir başka yararı da, başka bir özellikle birlikte kullanılarak, bir özellik için sadece okuma, sadece yazma ve okuma / yazma işlemlerini bile kontrol edebilmesidir. Buna ek olarak, işlevler tarafından hazırlanacak verilerin işlemesine olanak tanıyarak, nesnelerde veri bütünlüğü sağlanabilir.
Python'daki property kullanım örneği şu şekilde alınabilir:
```class OzellikOrnegi:
def __init__(self, ozellik): self.ozellik = ozellik
@property def Ozellik(self): print(f'{self.ozellik} Niteliği Okundu') return self.ozellik
@Ozellik.setter def Ozellik(self, value): print(f'{self.ozellik} Niteliği Güncellendi') self.ozellik = value
@Ozellik.deleter def Ozellik(self): print(f'{self.ozellik} Niteliği Silindi') del self.ozellik
ozellik = OzellikOrnegi("Özellik")print(ozellik.Ozellik)
ozellik.Ozellik = "Yeni Özellik"print(ozellik.Ozellik)
del ozellik.Ozellik```
Yukarıdaki örnek Django, Flask ve CherryPy gibi Python bazlı web uygulama çatıları üzerinde özellikle veri modelleme, nesnelerin işlemesi gibi farklı alanlarda kullanılabilir.
Örnek Bir @property
@property fonksiyonunun kullanımını açıklamak için mülk özelliklerini kullanabiliriz. Bu fonksiyon, bir özelliği bir metoda dönüştürmek için kullanılır.
Örneğin, bir mülk sınıfı oluşturmak istiyorsak, bu mülkün m2 cinsinden büyüklüğü olabilir. Ancak, bu değeri almak için bir method kullanmak istemeyebiliriz. Bunun yerine, @property fonksiyonunu kullanarak bu özelliği bir methoda dönüştürebiliriz.
Aşağıdaki tabloya bakalım:
Mülk | m2 |
---|---|
Mülk 1 | 150 |
Mülk 2 | 200 |
Yukarıdaki tablo, mülklerin m2 cinsinden büyüklüğünü gösteriyor. Ancak, bu değere erişmek için bir method kullanarak değil, bir property'e erişerek yapılabilir. Aşağıdaki örnekte, @property fonksiyonu kullanılarak bu özellik bir methoda dönüştürülmüştür:
class Mulk: def __init__(self, m2): self.m2 = m2@property def boyut(self): return self.m2
Mulk1 = Mulk(150)print(Mulk1.boyut) # 150
Yukarıdaki örnekte, Mulk sınıfı oluşturulurken m2 özelliği tanımlanır. Ancak, bu özelliğe erişirken bir method kullanmak yerine, 'boyut' isimli bir property kullanılır. Bu property, bir method gibi kullanılabilir ve m2 özelliğine erişim sağlar.
Bu örnekte, bir mülk nesnesi oluşturuldu ve 'boyut' özelliğine erişildi. Bu şekilde, @property fonksiyonunun nasıl kullanılabileceği ve mülk özelliklerinin bir methoda dönüştürülebileceği açıklanmış oldu.
Decorators Kullanımı
Decorators, Python programlama dilinde sıkça kullanılan bir yapıdır ve kod tekrarını önlemek, kodu daha anlaşılır hale getirmek ve bazı ek özellikler eklemek gibi amaçlarla kullanılır. Bu yapıyı kullanarak kodunuzu optimize edebilir ve daha okunaklı hale getirebilirsiniz.
Decorators kullanmanın birçok avantajı vardır. Özellikle, kod tekrarını önlemek, kodu daha anlaşılır hale getirmek ve bazı ek özellikler eklemek gibi amaçları olanlar için oldukça yararlıdır. Bu yapıyı kullanarak kodunuzu optimize edebilir ve daha okunaklı hale getirebilirsiniz. İşte birkaç kullanım örneği:
- Bir fonksiyonun çalışmadan önce veya sonra yapılması gereken bazı işlemleri ekleyebilirsiniz.
- Bir fonksiyonun hatalarını ayıklamak için bir hata ayıklama decorator'ü kullanabilirsiniz.
- Bir fonksiyonun ne zaman ve hangi durumlarda çalışacağını belirleyebilirsiniz.
Birçok decorator fonksiyonları kullanarak, kodunuzu daha anlaşılır ve modüler hale getirerek, kod okunaklılığı, bakımı ve yönetimi gibi konularda da size yardımcı olabilir. Bu nedenle, Python programlama dilinde decorator'ların kullanımı oldukça yaygındır.
En sık kullanılan fonksiyonlardan biri parametre olarak alınan bir fonksiyonu değiştirme ve geri döndürme görevini olan @decorator_fonksiyonu
fonksiyonudur. Bu fonksiyon, bir başka fonksiyonun üzerinde kullanıldığında, o fonksiyonun bir örneğini oluşturarak bu fonksiyona ek özellikler ve işlevsellikler ekleyebilirsiniz. Birçok farklı fonksiyonla ve kullanım örnekleriyle, decorator'ların geniş kullanım yelpazesi ve etkilerine sahip olduğunu söyleyebiliriz.
Decoratorların kullanımı, Python programlama dilinde muhtemelen üst sıralardaki en önemli konulardan biridir. Doğru kullanıldığında, bu yapının, yazdığınız kodun kalitesini ve okunaklılığını artırarak, daha iyi bir kod yazma deneyimi sunmasını sağlayabilirsiniz.
Fonksiyonları Süsleme
Python'da decorator fonksiyonları, fonksiyonların fonksiyonelliğini değiştirmeden önce veya sonra işlem yapmak için kullanılır. Fonksiyonlara eklenen decorator fonksiyonları ekleme işlemine, fonksiyonların süslenmesi veya dekore edilmesi denir. Fonksiyonları süslemenin özellikle benzersiz özellikleri, Python programlama dilinin obje odaklı, açık kaynaklı özelliklerinden kaynaklanmaktadır. Örneğin, bu dilde, "logging" dekoratör fonksiyonları kullanılarak fonksiyonların çalıştırılmasını ve çıktılarını kaydedebilirsiniz. Ayrıca, "timing" dekoratör fonksiyonları, fonksiyonların çalışma süresini ölçmek ve bu süreyi optimize etmek için kullanılabilir.Aşağıdaki örnekte, bir fonksiyonun nasıl dekore edilebileceği açıklanmaktadır:Örnek:
def logger(func): def wrapper(): print("Logging başlatıldı") func() print("Logging durduruldu.") return wrapper@loggerdef sample(): print("Merhaba Dünya")sample()
Bu örnekte, "logger" adında bir decorator fonksiyonu tanımlanmıştır. Daha sonra "sample" adında bir fonksiyon tanımlanmıştır, daha sonra "logger" fonksiyonu ile süslenmiştir. "logger" fonksiyonu, "wrapper" fonksiyonunu içermektedir. "wrapper" fonksiyonu, decorator fonksiyonundan önce bir mesaj yazdırır, "func" fonksiyonunu çalıştırır ve decorator fonksiyonundan sonra bir mesaj daha yazdırır.Fonksiyonlar süsleme, Python dilinde sıklıkla kullanılan bir yöntemdir. Bununla birlikte, dikkatli kullanılmadığında, kodun karmaşıklığına ve anlaşılırlığının azalmasına neden olabilir.Hata Ayıklama Yapmak için Decorators Kullanmak
Python'daki decorators, hata ayıklama sürecinde oldukça yararlıdır. Hata ayıklama decorators'lar, hata ayıklama işlemi için kullanılabilen özel decorators'lardır. Bu decorators'lardan bazıları, hata ayıklama işlemi sırasında loglama yapmak, zaman damgası eklemek veya hata ayıklama modunu açmak ve kapamak için kullanılabilir.
Aşağıdaki örnekler, birkaç hata ayıklama decorators kullanımına örnek verir:
@profile
@timeit
@debug
@profile
, Python'da kullanılan bir decorators'dır ve bir fonksiyonun performansını ölçmek için kullanılır. Bu decorators, işlevin ne kadar sürede çalıştığını ve işlevin belirli bir adımda ne kadar hızlı olduğunu ölçmek için kullanılabilir.
@timeit
de bir performance decorators'dır ve bir fonksiyonun ne kadar sürede çalışacağını ölçmek için kullanılır. Ancak burada ölçülen süre, fonksiyonun çalışması için geçen gerçek süredir.
@debug
decorators'ı ise, kodun işleyişini takip etmek ve beklenmedik hataları yakalamak için kullanılır. Bu decorators, başarısız bir fonksiyon çağrısı hakkında bilgi veren hata ayıklama bilgilerini yazdırabilir.
Hata ayıklama decorators'ının kullanımı oldukça yaygındır ve geliştiricilerin kodlarını daha güvenli ve sağlam hale getirmelerine yardımcı olur.
İşlevsellik Ekleme
Decorator fonksiyonları, Python'da işlevsellik eklemek için kullanılan güçlü bir araçtır. İşlevsellik ekleme, bir fonksiyona ekstra özellikler eklemek için kullanılır.
Bir örnek olarak, bir web uygulamasında kullanacağımız bir fonksiyon için, girişleri doğrulayan ve oturum açma gereksinimleri kontrol eden güvenlik özellikleri eklemek isteyebiliriz. Bunun için bir decorator fonksiyonu yazabiliriz ve böylece bu güvenlik özelliklerini genellikle yazdığımız her işlevde kullanabiliriz.
İşlevsellik eklemek için decorator fonksiyonlarının kullanımını göstermek için örnek olarak şöyle bir scenario düşünebiliriz: Bir banka hesabı uygulamasında dolar karşılığı bir hesap tutarını işlemleyen bir fonksiyonumuz olduğunu varsayalım. Bu işlev, hesabın dolar cinsinden tutarını ve müşteri hesap numarasını alır. Ancak, banka çalışanlarından biri, işlevin çağrıldığını görmesine rağmen, doğrudan hesap tutarını almak için bir yolu yoktur. Bunu çözmek için bir decorator fonksiyonu kullanabiliriz.
Aşağıdaki örnekte, decorator fonksiyonunu kullanarak işlevsellik eklemeyi görebilirsiniz:
Kod: | Sonuç: |
---|---|
def hesap_tutari_kontrol(fonksiyon): def wrapper(*args, **kwargs): dolar_karsiligi = args[0] if dolar_karsiligi > 5000: return "Ana bileşenin dolar karşılığı 5000'den fazla olamaz." else: return fonksiyon(*args, **kwargs) return wrapper@hesap_tutari_kontroldef hesap_bilgileri(dolar_karsiligi, hesap_no): return f"Hesap numarası {hesap_no} olan müşterinin dolar cinsinden hesap tutarı {dolar_karsiligi} dir." | >>> hesap_bilgileri(4000, 12345678)'Hesap numarası 12345678 olan müşterinin dolar cinsinden hesap tutarı 4000 dir.'>>> hesap_bilgileri(8000, 12345678)"Ana bileşenin dolar karşılığı 5000'den fazla olamaz." |
Yukarıdaki örnekte görüldüğü gibi, hesap_tutari_kontrol() adlı decorator fonksiyonu, hesap_bilgileri() fonksiyonunu parametre olarak alır ve hesap_bilgileri fonksiyonundaki dolar karşılığı parametresinin değerini kontrol eder. Eğer dolar karşılığı 5000'den fazlaysa, decorator fonksiyonu buna izin vermez ve istenen mesajı döndürür. Eğer dolar karşılığı 5000 ve altındaysa, hesap_bilgileri fonksiyonu çalışır ve hesap bilgilerini döndürür.
Bu örnek, decorator fonksiyonları kullanarak işlevsellik eklemenin ne kadar kolay ve hızlı olabileceğini göstermektedir. Böylece, kodunuzu daha etkili hale getirirsiniz.