Tamam.
Bu devasa liste nihayet hafızaya kaydedilmeyi tamamladı.
Ancak anahtar terimlerimizi unutmayın.
Bir listenin yinelenebilir olduğunu söylediğimi hatırlıyor musunuz?
Yinelenebilir nedir?
Bir iterable, Python'da kaputun altında döngü yapabildiğimiz herhangi bir nesnedir.
Dunder enter yöntemine sahiptir.
Dolayısıyla, nesne oluşturulduğunda, bu düzenleyici bir şeyi yinelemek için üzerinde yinelenebilecek
bir yinelenebilir nesneye sahip olmamızı sağlar veya yineleme, bir yinelenebilirden bir öğe alıp ona bir şey yapma ve ardından bir sonrakine geçme
eylemidir.
For döngüsü ya da while döngüsü gibi döngüler kullandığımızda buna iterasyon diyoruz.
Bu sürecin kendisi.
Ve jeneratörler.
Aslında yinelenebilir.
Yani bir üreteç olan her şey yinelenebilir.
Bunlar üzerinde yineleme yapabilirsiniz, ancak yinelenebilir olan her şey bir üreteç değildir.
Örneğin, bir aralık bir jeneratördür.
Yani bu her zaman yinelenebilir olacaktır.
Ancak liste bir yinelenebilirdir, ancak bir üreteç değildir.
Yani bir üreteç, bir yinelenebilirin alt kümesidir.
Bunların çok fazla kelime olduğunu biliyorum.
Umarım hala benimlesindir.
Bir üreteç ile normal bir yinelenebilir arasındaki fark, onları uygulama şeklimizdir.
Şimdi size bir jeneratör oluşturmanın genel bir yolunu göstereyim.
Bu kodu temizleyelim ve kendi jeneratörümüzü tanımlayalım.
Ve jeneratörler genellikle tıpkı range'in bir fonksiyon olması gibi fonksiyonlardır.
Jeneratörler genellikle bu şekilde oluşturulur.
Diyelim ki jeneratör fonksiyonu.
Ve bu üreteç işlevi, daha önce yaptığımız gibi bir aralık üzerinde döngü yapacak dört döngüye sahip
olacak.
Ancak buradaki fark, aslında daha önce sahip olduğumuz kodu geri getirelim.
Bunu yorumlayacak, böylece aradaki farkı görebileceğiz.
Jeneratör işlevi gidiyor.
Diyelim ki şu kadar öğe oluşturun.
Ancak normal bir fonksiyonda olduğu gibi geri dönmek yerine, yield adlı bir anahtar sözcük kullanacağız.
Ve burada I'yı yani öğeyi vereceğiz.
Buradaki farka dikkat edin.
Şimdi, eğer istersek, tıpkı burada olduğu gibi, bir sayı geçebiliriz.
Bunun gibi.
Ama geri dönmek yerine.
Bu listeyi eklerken ve tüm bu verileri oluştururken eald kullanacağız.
Şimdi Hield ne yapıyor?
Gördüğünüz gibi, Hield fonksiyonu duraklatıyor ve ona bir şey yaptığımızda geri dönüyor, bu da next olarak adlandırılıyor, kısa bir
süre sonra ele alacağımız bir şey.
Hield diyor ki, Hey, işlevi duraklat, sadece Hield ben veriyorum ve sen bana tekrar devam etmemi söylediğinde
devam edeceğim.
Peki bunu nasıl yapabiliriz?
Jeneratör işlevindeki öğe için söyleyebilirim.
Ben gidiyorum.
Yazdır.
Ürün.
Şimdi burada olacak şey, jeneratör fonksiyonu üzerinde döngü oluşturacağız ve jeneratör fonksiyonuna
vereceğiz, şimdilik 1000 diyelim.
Ve bu bir yinelenebilir olduğu için üreteç işlevindeki her öğeyi yazdıracağız.
Çalışacak ve dönecek.
Ve bu sayıdaki her öğe için, aralık olması için, Y vereceğiz, böylece döngü ve döngü
devam edecek.
Ve geri döndüğümüzde, tekrar döneceğiz.
Bunu ve verimi araştıracağız.
Geri gelir ve tekrar çalışır.
Size ne demek istediğimi göstereyim.
Bunu da yorumlayacağım, bunu da yorumlayacağım.
Ve sadece buraya tıklayın.
Bunu gördün mü?
Burada yaptığımız da aşağıdakine benziyor, ancak bu listeyi bellekte oluşturmak yerine
tek tek devam ediyor.
Hafızamızda sadece bir madde vardı.
Ve onu istediğimiz gibi kullandık.
Bizim durumumuzda, tek yaptığımız öğeyi basmaktı.
Bu anahtar kelimeyi biraz daha inceleyelim.
Aslında ne işe yarıyor?
Diyelim ki bunu ikiyle çarpmak istiyoruz, tıpkı burada listelerle yaptığımız orijinal örneğimizde olduğu
gibi.
Ama şimdi, dört döngü yapmak yerine, sadece fonksiyonu çağıralım.
Ve diyelim ki, vay canına, eşittir jeneratör fonksiyonu ve biz ona 100 vereceğiz.
Şimdi G'yi yazdırırsam ve Çalıştır'a tıklarsam.
Şunu görüyor musun?
Bir jeneratör nesnesi alıyorum.
Ve unutmayın, bu Python'da aralık ve yield anahtar sözcüğünü kullanarak bir üreteç fonksiyonu oluşturabileceğimiz
standart yoldur.
Ancak bu anahtar kelime bize biraz güç veriyor çünkü eğer buraya geri dönersem.
Özel bir şey almayacağız.
Aslına bakarsanız, yield anahtar sözcüğünü kullanarak bunun yerine bir değer elde edeceğiz.
Yapabildiğimiz şey, bunu iyi yapabilen bir jeneratör fonksiyonuna dönüştürmek.
Bunu bir dahaki sefere söyleyebilirim.
Şimdi buraya bir sonraki G'yi yazdırırsam ve Çalıştır'a tıklarsam.
Sıfır alıyorum.
Ama işin güzel kısmı şu.
Sonraki G'yi iki kez ve sonra bir kez burada yapıp yazdırırsam.
Ben alıyorum.
Nedenmiş o?
Anahtar kelimenin fonksiyonu duraklattığını unutmayın.
Burada olan şey, fonksiyonu 100 ile çalıştırmam oldu.
Aralık 100'deki ilk öğe sıfırdı.
Doğru.
Şimdi burada bunu çalıştırmadan önce, Hey, bu bir jeneratör fonksiyonu, ancak ilk kez çalıştırdığınızda
dedi.
Çıktıya sıfır çarpı iki verin, böylece bu işlevi ilk kez çalıştırdığımızda ve Çalıştır'a tıkladığımda.
Bunu "ben" olarak değiştireceğiz.
Bu sadece sıfır.
Eğer tekrar bu şekilde çalıştırırsam, o zaman var.
Şimdi yinelemenizi ve bire gitmenizi istiyorum.
Yani bir kere iki.
O da ne?
Bir kere iki.
Şunu düzelteyim.
Bunun gibi.
Bunun ben olduğundan emin olun, iki alıyorum çünkü bir kere iki iki eder.
Eğer tekrar çalıştırırsam ve çalıştır'a tıklarsam.
Ben alıyorum.
Görüyorsun ya.
Hield, daha önce de söylediğim gibi, işlevi duraklatır ve sonraki çağrıldığında ona geri döner.
Yani bir verim anahtar sözcüğü varsa, bir jeneratör haline gelir.
Değer olarak adlandırdığımız bu durumu takip eder ve yalnızca en son veriyi bellekte tutar,
örneğin bunu hatırlar çünkü diyelim ki 14. satırda sonraki G'yi yazdırırsam.
Daha önce böyle olduğumu hatırlıyor.
İyi.
Şimdi, bu kod parçası zaten çalışmış olsa bile, çevrimiçi olarak çalıştırırsam, satır 14.
Altı tane mi alacağım?
Çünkü üç kere iki altı eder, unutmayın, çünkü iki ile çarpılır.
Size şunu sormama izin verin.
Diyelim ki burada sadece bir aralık yapıyorum.
Ve ne var biliyor musun?
İki ile çarpma işlemini kaldıralım.
Bunu yaparsam ve birden fazla kez çalıştırırsam, Burayı çalıştır'a tıkladığımda ne olacak?
Durduruldum.
Yineleme.
Gördüğünüz gibi, next istediğimiz kadar çok kez çağrılabilir.
Bu aralık sona erene kadar birçok kez.
Ve aralıktaki öğe sayısını aştığımızda.
Yinelemeyi durdur hatası alıyoruz.
Artık sıradakini arayamayacağınızı bize bildirmek için.
Satır sonuna ulaştık ve aralıklı for döngüleri kullandığımızda, aslında bunu sizin için
algılar.
Böylece aralık bir üreteç olmasına rağmen aralık kullandığımız bunun gibi bir işlevi çalıştırabiliyoruz, çünkü for döngüsü
otomatik olarak şunu söylüyor: Hey, bu durdurma yinelemesiyle karşılaştığım anda döngüyü durduracağım, ancak
bu kullanıcı olarak bizden gizleniyor.
Şimdi, bu jeneratör kavramını anlamak oldukça zordur, özellikle de ilk başta.
Bu yüzden buna birkaç kez bakmanız gerekebilir, ancak önümüzdeki birkaç videoda sizi ne kadar güçlü
olduklarına ikna etmek istiyorum.
Bir dahaki sefere görüşürüz.