Memoisation, decoration() Python. - Turkhackteam.org/net - Ethical Hacking & Cyber Security Platform
Memoisation, decoration() Python.
Memoisation in Python
Konumuz memoisation("ingilizce - memoization") 1968 yılında sakallı bir adam tarafından keşfedilmiştir. Bu sakallı adamın adı Donald Michie'dir. Kelimenin kökü latinceden "memorandum" dan gelir ve "Hatırlamak, bir şeyi hatırlama" anlamlarından gelir. Memoisation program akışını hızlandırmak için bir tekniktir. Bu işlem ile sonucları elde ettikten sonra saklayabilir-kaydedebilirsiniz. Mesela fonksiyon çağırmalarında, vereceğim örnekler ile zaten daha kolay anlayacaksınız. Mesela diyelim bir fonksiyonu aynı parametreler ile bir daha çağırıyorsunuz, bu fonksiyonu tekrar hesaplamak yerine, bellekte kaydettiği değer üstünden hesaplar. "Peki zaten sonuçları herhangi bir diziye zaten kaydederiz ordan okuturuz" diyecek olan arkadaşlara ilerde daha karmaşık durumlarda ve bir şirket ile resmi olarak çalıştığınızda bu tekniğe o kadar ihtiyacınız olacak kii. Memoisation programcı tarafından açık bir şekilde kodlanilabilir ama Python gibi dillerde memoisation uygulamasını kolaylaştırmak için mekanizmaları vardır.
Bir önceki konum Rekursion() ' da 1 adet iterative 1 adet rekursive fonksiyon tanımlamıştım, fibonacci sayılarını hesaplamak için.
Biz burda gostermistik nasil rekursion ile fonksiyonumuzu hizlandirabiliriz diye. Memoisation isleminde fonksiyon islem gorurken sonraki cagirmalarda daha hizli olmasi icin bir nevi bellekte yer tutar. Acikcasi Memoisation tekniginin nasil kullanacagina iliskin bir ornekti ama biz boyle adlandirmamistik. Bu yontemin tek dezavantaji Rekursion isleminin netligine ve guzelligini kaybetmesine sebep olmasi. Assagida ki kod fib fonksiyonumuzu degistirmez boylece okunabirligi, netligi etkilenmez. Bu amacla memoize() adli bir fonksiyon kullaniyoruz 2 arguman alir. Sonra memo adli bir sozluk olusturuyoruz degerimizi kaydetmesi icin. Yardimci helper olarak bir degisken tanimlayalim ve bize degeri dondursun. Biz bu fonksiyonu memoize(fib) seklinde cagirdigimiz zaman bize fib fonksiyonumuzdaki giris ve cikis degerlerini verir.
Evet burada fib fonksiyonumuzu Memoisation tarafindan dekore edildigini goruyoruz.
Tabii ki biz bir class olusturup sonuclari oradan dondurup, kaydedebiliriz ornek olarak ;
Onemli not ;
Burda bir sozluk kullandik normal mutable arguman kullanamayiz. Sadece immutable argumanlarini kullanabiliriz Tupel gibi.
Decorateure Python ;
Gercek objelerimiz yani degistirilecek olan objelerimiz arguman olarak verilir. Dekorateur degistirilmis objeyi geri dondurur. Yani ornegin degistirilmemis bir fonksiyon degistirilmis diger objenin adiyla degistirilir. Python Dekorateure'un Syntax'i direk java gibidir. Pythonun sozdizimi bu konuda seker gibi gorunur @ kullanilarak.
Cok dekorateurdan bahsettim ama sunu soylemedim bu yazimin en basinda verdigim ornek memoisationda "def memoize(f):" fonksiyonunun Dekorateur oldugunu soylemedim galiba. Ama biz o ornekte Pythonun Dekorateur-Syntax'ini kullanmadik yani @ isaretini.
Basitlestirilmis su kullanimi kullanabiliriz ;
Ancak bu komut dekorize edilecek fonksiyondan once kullanilmalidir.!
Ve yazimin sonuna gelirken fib fonksiyonumuz komple halini atalim ;
Unutmadan fonksiyon Negative,float sayilar ile cagirilmamalidir, eger cagirirsaniz sonsuz donguye sokabilirsiniz. Evet simdi konumuzu bagdastirmak icin sayinin Pozitiv olup olmadiginini test edip tam sayi ise faktoriyelini hesaplasin ornegini yapalim. Ama Dekorize edilmis hali ile
raise Exception("Arguman integer degil")
Evet bir makalemin daha sonuna geldik yine mobilde oldugum icin ve ne yazikki Turkce klavyem bozuldugu icin yazim kurallarina dikkat edemedim. Eger bir yerde yanlisim var ise duzeltiniz lutfen, yanlis yapa yapa dogruyu ogrenmek akilda birakir memoisation hesabi
Dekorateure = Dekorator
Decoration = Dekorasyon
Ne kadar surc-i lisan ettiysek affola.
Konu ALcatraz' tarafından (28-07-2017 01:45 Saat 01:45 ) değiştirilmiştir.
YouKnowWho, Hacknology, xAesir Teşekkür etti.
Anlayabiliyorum Dostum açıklaman için teşekkürler
Kodları güncellediğinizde bilgi verirseniz sevinirim
Evet bakınız bir yanlıs anlama daha decoration ettiğimiz objeler @memoize den sonra fonksiyona bir nevi bağlanır ve orada tanımladığımız argümanı bizim yardımcı fonksiyonumuzda ki argümana eşitler. Ve bize aynı isimde bir argüman döndürür. Kodlarda her hangi bir sıkıntı yok yani.
Hocam anlamadjğım nokta helper fonksiyonuna verilen x parametresine hangi argüman geliyor yani x'e attanan değeri ne belirliyor
x e atanan değer şöyle geliyor, aslında decorator method inner methodu return ediyor, ve decoratorü kullanan method un parametresi bu inner method a geçiyor.
Decorator kullanımı şuna eşit :
my_dec_func = memoize(fib) //burada inner method return ediliyor
my_dec_func(5) //inner methoda parametre olarak geçiliyor
Aslında şu konuyu okursan kafanda netleşir her şey : https://www.thecodeship.com/patterns...on-decorators/
Ek olarak first class function kavramını araştırırsan biraz daha oturur kafanda.
Anladım yani n parametresine verdiğimiz değer @memoize ile x parametresine argüman olarak veriliyor yani
Anladım hocam yani memoize(fib(10)) değeri önce fib() func. fib(10) için bir değer döndürüyor daha sonra bu değeri de helper() foksiyonuna argüman olarak atıyor
Doğru söyledim değil mi?
Ellerine sağlık alcatraz. Okurken zevk aldım
Eline saglık.guzel anlatım olmuş.