Son olarak kendi dekoratörümüzü yazalım.
Unutmayın, bir dekoratör fonksiyonumuzu güçlendirir.
Basitçe, başka bir işlevi saran ve onu geliştiren veya değiştiren bir işlevdir.
Ancak bunun ne olduğunu açıklamanın en iyi yolu aslında kendi kodumuzu yazmaktır.
Hadi yapalım şunu.
Bir my tanımlayalım.
Dekoratör ve bu dekoratör hemen bir fonksiyon kabul edecektir.
Bunun artık burada daha yüksek dereceli bir fonksiyon olduğunu bilmeliyiz.
Buranın içinde, fonksiyonu çağıracağız.
Ancak bunu yapmadan önce, aslında bu fonksiyonu başka bir fonksiyonun içine saracağız.
Bu yüzden wrap fonksiyonunu tanımlayın diyeceğiz.
Yani bu sadece bir sarmalayıcı ve bu sarmalama işlevi.
Bu funk'ı basitçe çalıştıran bir fonksiyon olacak.
Ve son olarak wrap fonksiyonunu geri döndüreceğiz.
Burada dikkat ederseniz onu çağırmıyorum, sadece daha sonra birinin kullanabilmesi için geri gönderiyorum.
Tamam.
Şimdi, diyelim ki basit bir fonksiyonumuz var.
Merhaba.
Ve bu basit fonksiyon sadece yazdırır.
Merhaba.
Ne kadar gereksiz bir işlev.
Şimdi.
Bu neden yararlıdır?
Çünkü şimdi bunu python dekoratörü olarak kullanabilirim.
Bunun önüne bir A yazdığımız anda, hey, bu bir dekoratör ve dekoratör olacak
diyecek.
Bir fonksiyonu kabul etme, bir sarmalayıcı fonksiyona sahip olma, fonksiyonu çağırma ve sarmalayıcı fonksiyonu döndürme sözdizimini
takip ettiğimiz sürece kullanılabilir.
Dekoratörümü yaparsam nasıl mavi olduğunu görürsünüz.
Şimdi bu dekoratör aslında fonksiyonlarımızı tanımlarken üstte kullanılabilir.
Eğer dekoratörümü hello fonksiyonu üzerinde kullanmak istiyorsak, bunu şu şekilde kullanacağız, böylece programımda
hello next dediğimde
Koş'a tıklıyorum.
Anladım.
Alo?
Tamam.
Ne düşündüğünü biliyorum.
Bunun tamamen zaman kaybı olduğunu düşünüyorsun, Andre.
Neden bütün bunları yapmak zorundaydım?
Sadece bunu yapabilirdim.
Sadece tanımla.
Merhaba.
Ve hepsi bu kadar.
Kafam çok karıştı.
Şey, olay şu.
Az önce dekoratörle yaptığımız şey.
Hiçbir şey değişmedi.
Tam olarak beklendiği gibi çalışıyor.
Ancak bize sağladığı şey, artık ekstra işlevsellik ekleyebilmemizdir.
Dekoratörlerin benim dekoratörüm gibi bir fonksiyon olduğunu söylediğimi hatırlayın; bu fonksiyonu saran başka bir fonksiyondur ve bu da ona
aktardığımız fonksiyondur.
Ve onu geliştirir.
Peki nasıl geliştirebiliriz?
Alo?
Bu sarılmış fonksiyonun içinde her şeyi yapabiliriz.
Örneğin, yazdır diyebilirim ve sonra buraya sadece birkaç yıldız yazdırırız ve belki de yazdırırız.
Burada bir yıldız daha var, böylece koş dediğimde
Bum.
Daha yeni süper güçlendirdik.
Merhaba.
Fonksiyon.
Ne kadar havalı değil mi?
İşte bu yüzden dekoratörler sadece bu tek satırı ekleyerek faydalı olurlar.
Bir fonksiyonu süper güçlendirebiliyorum, böylece diyelim ki adında başka bir fonksiyon oluşturuyorum.
Hoşça kal.
Ve bu satın alma basılacak.
Sonra görüşürüz.
Buradan arayarak ve çalıştır'a tıklayarak.
Değişen bir şey yok.
Ama süper güçlendirmek isteseydim, tıpkı
Merhaba.
Tek yapmam gereken dekoratörü kopyalamak ve burada da kullanmak.
Böylece eğer çalıştırırsam.
İşte oldu.
Alımlarımızı süper artırdık.
Bu, dekoratörlerin gücüdür.
Sadece bu sözdizimini kullanarak diğer fonksiyonlara ekstra işlevsellik ekleyebilirim.
Şimdi ne düşündüğünü biliyorum.
Biliyorum, ben de bunu çok sık söylüyorum.
Sanki zihin okuyabiliyorum ama.
Bunun çok fazla sihir olduğunu düşünüyorsun.
Python yorumlayıcısı tüm bunları nasıl yapıyor?
Öyle görünüyor.
Sihir, değil mi?
Kaputun altında.
Tek yaptığı bu.
Sana göstereyim.
İşlevler hakkında şimdiye kadar öğrendiklerimize dayanarak, çünkü onlar birinci sınıf vatandaşlardır.
Doğru.
Yaptığımız tek şey kelimenin tam anlamıyla bu.
Değişken a diyoruz.
Eşittir.
Alo?
Ve bu merhabayı paketleyip dekoratörümle birlikte arıyorum.
Dekoratörüm diyorum.
Ondan sonra da böyle bir şey yapıyorum.
Diyelim ki bu bir merhabaydı.
Ben sadece çalıştırıyorum.
Bu şekilde.
Yani bunu çalıştırırsam.
Her şey hala çalışıyor.
Tek yaptığım hello fonksiyonumu sarmak.
Dekoratörümle ve onu bir değişkene atayarak.
Adım adım gidersek, dekoratörümün bir fonksiyon aldığını görürüz.
Bizim durumumuzda hello fonksiyonu.
Daha sonra, içinde hello bulunan bu sarılmış işlevi döndürür.
Böylece bu sarma işlevini döndürüyoruz.
Şimdi merhaba, bu sarmalanmış fonksiyona eşittir ve sonra bu sarmalanmış fonksiyon çağrılır ve ne ile çağrılır.
Bunu yazdırıyor, sonra hello fonksiyonunu çalıştırıyor ve sonra bunu yazdırıyor.
Bunun gibi bir şey yapmakla aynı şey.
Sadece tekrar arayacağız.
Eğer bunu çalıştırırsam.
İşe yarıyor.
Garip görünüyor, değil mi?
Ama mantıklı olmalı.
İlk fonksiyonu çağırıyoruz ve ilk fonksiyon başka bir fonksiyon döndürüyor ve sonra bir sonraki
dönüş fonksiyonu olan wrap fonksiyonunu çağırıyoruz.
Dekoratörlerin yararlı olmasının nedeni, bunu yapmak ve açıkçası kafa karıştırıcı görünmek yerine,
sadece dekoratörüme ekleyebilirim ve tüm bunları yapmamıza gerek kalmaz.
Bizim merhabamız dekoratörüm tarafından otomatik olarak sarılıyor ama aslında sanat sahnesinin yaptığı
da bu.
Gördün mü?
Bunda sihirli bir şey yok.
Şimdi.
Şu anda.
Bu güzel, ama eminim hala dekoratörlerin neden yararlı olduğunu merak ediyorsunuzdur.
Dekoratörler hakkındaki bilgilerimizi tamamlamak için biraz ara verelim ve bir sonraki videoda görüşmek
üzere.