Och, seni göremiyorum.
Ama ne hissettiğini biliyorum.
Şu anda benden şüphe ediyorsun.
Jeneratörlerin işe yaramaz olduğunu düşünüyorsun.
Sürekli hızlı ve performanslı olduklarını söylüyorsunuz ama ben bunu gerçekten anlamıyorum.
Bu L anahtar kelimesi ve bir sonraki.
Ve dürüst olmak gerekirse, sadece.
Bu hiç mantıklı değil.
Sizi gerçek güçleri konusunda ikna etmeme izin verin.
Bunların hepsini seçeceğim ve sileceğim çünkü daha önce kullandığımız bir örneğe geri dönmek
istiyorum.
Dekoratör performansını yarattığımız zamanı hatırlıyor musunuz?
Süslü bölümümüzde.
Bu performans dekoratörünü kullanarak.
En aza indirelim.
Yapmak zorundayım.
Bizim için bir aralık kullanan uzun süreli bir fonksiyon.
Ve bir aralık kullanan ve ardından bunu bir listeye dönüştüren başka bir longtime işlevi.
Unutmayın, kişi bir liste oluşturur.
Ve sonra bilgisayarlarımızda bellekte oluşturulan bu listeden, bire bir gidecek
ve Python'da yerleşik olarak gelen ve sadece bire bir sıfır ve bellek tutacak ve beş ile çarpacak,
bir bellek tutacak, ancak beş ile çarpacak ve devam edecek, devam edecek, devam edecek ve bellekten
eski sayıları kaldıracak bir aralıkla çarpacak.
Sizce bu ikisinin performansı ne olacak?
Hadi test edelim.
Bu arada, kendiniz test edebilmeniz ve oynayabilmeniz için alıştırmanın bağlantısını vereceğim.
O zaman uzun zaman yapalım.
Ve uzun zaman sonra.
Bahislerinizi koyun.
Hazır olun.
Hadi öğrenelim.
İlk fonksiyon uzun süre 1 aldı. 6 saniye.
Ve sonra ikinci işlev neredeyse iki kat daha uzun sürdü.
Bu oldukça büyük bir fark, değil mi?
Ama hemen söyleyebiliriz.
Tamam.
Bu kesinlikle iyi, uzun zamandan da daha performanslı.
Varsayımlarımızı test etmek için tekrar çalıştıralım.
Doğru olduğundan emin olun.
Bu sefer 1 dakika sürdü. 8 ve sonra 2. 6.
Tamam.
İkisi de aynı şeyi yapmasına rağmen bu çok daha hızlı.
Bir de şunu düşün.
Google olsaydınız, Google'ın ne kadar veriye sahip olduğunu düşünün.
Google'da çalışıyorsanız ve bunun daha da büyük olduğunu, daha da uzun olduğunu, bir görevi çok
daha hızlı gerçekleştirebildiğinizi hayal edin.
Google'ın sahip olduğundan çok daha az kaynak kullanın.
Yani, sizi çok severlerdi çünkü jeneratörler sayesinde bir şeyleri bellekte tutmuyor, tüm bu kaynakları
tüketmek zorunda kalmıyor ve bunun yerine verileri verimli bir şekilde işleyebiliyoruz.
Ve şuraya bak.
Bu fonksiyonu 16 saniyede çözebildim.
Yani, evet, bu uzun zaman aldı, ama aslında bunu yapmak için bile uzun zaman süreci öldürdü.
Eğer bu bir Google sunucusuysa, bu yeni ölmüş ve tamamen işe yaramaz bir sunucudur.
Dolayısıyla jeneratörler, büyük veri kümelerini hesaplarken, özellikle de bu belleği gerçekten saklamak istemediğimiz
ve her şeyi aynı anda, belki de tek tek hesaplamamız gerekmeyen uzun döngüler kullanıyorsak gerçekten
çok kullanışlıdır.
Ve Python'daki pek çok kütüphane liste kullanmak yerine jeneratör kullanır çünkü bunlar çok
daha hızlıdır.
Bu yüzden bir jeneratör oluşturmayı unutmayın.
Tek yapmamız gereken istediğimiz bir jeneratör fonksiyonu oluşturmak.
Ve sonra burada, sadece bazı değerler üzerinde döngü yapabiliriz.
Belki bunu bir aralığa verebiliriz ya da sadece parametre olarak kabul edebiliriz.
Ve tek yapmamız gereken basitçe.
Verim.
Bu sonuç.
Ve bu blokta ne istiyorsak onu yapalım.
Ancak daha sonra kullanılabilmesi için işlevi duraklattığımızdan emin olun.
Üreteç işlevi olarak, for döngüsü gibi bir şey yapabilir ve gen işlevinde öğe diyebilir ve ona bir tür parametre
verebiliriz.