Eğitmen: Merhaba, tekrar hoş geldiniz.
Bu videoda jeneratör sınıfları
ve iteratörler hakkında konuşuyoruz.
Burada size son videoda yaptığımız 100 sayı
üretecini uygulayan bir sınıf göstereceğim.
Bu yüzden ona FirstHundredGenerator adını vereceğim.
Bunun gibi ve sonra bir init yöntemi tanımlayacağız.
Bu da sayıyı sıfır olarak başlatacak ve ardından
bir sonraki alt çizgi, alt çizgi, sonraki
yöntemi tanımlayacağız.
Bir sınıfta bir next metodu tanımladığınızda, herhangi
bir nesneyi aşağıdaki gibi next of my object olarak çağırabilirsiniz.
Yani bu yine bir dunder metodudur ve üzerinde
next'i çağırmanıza izin verir.
Ayrıca Python'a oldukça önemli bir şey söylüyor.
Buna birazdan bakacağız.
Yani, 100 sayı üretmek istiyorsak, tek yapmamız gereken
kendini elde etmektir. numarasını döndürür
ve bir artırır.
Yani, eğer self. sayı 100'den küçükse, bu arada
burada yield anahtar sözcüğünü kullanmayacağız,
çünkü bir sınıf oluşturucuda buna ihtiyacınız yoktur.
Üzgünüm, bu şeylerden birinde. (gülüyor) Yanlış
anlaşılabilecek hiçbir şey
söylemeyeceğim.
Kafanı karıştırmayayım.
Yapılacak şey, sayı 100'den küçükse,
bunu bir değişkene koyarız,
sonra sayıyı bir artırırız ve sonra önceki değer
olan mevcut sayıyı döndürürüz,
yani bu sıfırdır.
Kendimizi geliştiriyoruz. sayı bir artarsa sıfır döndürürüz.
Tamam.
Şimdi sınıfta önemli olan,
sayıları döndürmeyi durdurmak
istiyorsak, burada
olduğu gibi, 100'e ulaştığımızda bizi durduracak
bir döngü kullanmıyoruz.
Bu nedenle, 100'e ulaştığımızda Yinelemeyi Durdur
adı verilen özel bir hata oluşturmamız gerekir.
Yinelemeyi Durdur hatası Python'a
bu üretecin sonuna ulaştığımızı söyler.
Jeneratör diyorum ve hafifçe irkiliyorum, um burada.
Çünkü bu aslında bir jeneratördür, sıfırdan başlarsınız,
sonra yeni bir sayı
döndürmek isteyip istemediğinize karar verirsiniz, o sayıyı alırsınız
ve sonra döndürürsünüz ve sonra program
durur.
Ancak nesneniz kalır ve kendini hatırlar. Numara.
Yani, eğer benim jeneratörüm varsa ve bu bizim ilk yüz
jeneratörümüzse.
Benim genlerim. sayısı elbette başlangıçta
sıfırdır.
Değil mi?
Sana bunu gösterelim.
Genetik olarak başlangıçta sıfır rakamı var.
Eğer benim jenerasyonumu yaparsan. sonraki gibi, ve sonra
genimi yazdırın.
Bir
numara daha, bir tane alırsın.
Bu mantıklı, değil mi?
Çünkü buradaki bir sonraki yöntem, sayının 100'den küçük olup
olmadığını kontrol ediyor
ve ardından bir artırıyor.
Yani bunların hepsi mantıklı.
Şimdi, bir jeneratör gibi davranmasını
sağlamak için, bu şekilde next of my gen dememiz yeterli.
Sonra bunu tekrar çalıştırabiliriz ve aynı şey ortaya çıkar.
Elbette, bir sonraki genim aslında
biz onu artırmadan önce sahip olduğu sayıyı döndürüyor.
Bu yüzden genetiğimi basmak yerine Burada sayı, sadece genimin
bir sonrakini yazdırabiliriz ve burada da genimin
bir sonrakini yazdırabiliriz ve aynı çıktıyı
alırız, sıfır ve bir.
Next'i ilk kez çağırdığımızda, sıfır olan mevcut değeri
alırız, ancak self'i artırmış oluruz. bir sayı.
Next'i bir sonraki çağırışımızda,
bu sayıyı yine bir artırırız, ancak bir önceki
değer olan bir değerini döndürürüz.
Şimdi bu tam olarak bir jeneratör gibi davranıyor
ve gerçekten de bu bir jeneratör.
100'e kadar olan tüm değerleri bir listede saklamıyor.
Size teker teker veriyor.
Bir sonraki işlevi çağırdığınızda bunları üretiyor.
Üzgünüm, bir sonraki yöntem.
Bu arada, dunder next Python 3'te yeni bir özellik.
Yani Python iki kullanıyorsanız,
next'i alt çizgi olmadan tanımlamanız gerekecektir.
Bu sadece Python 2 için.
Python üç kullanıyorsanız sıradaki dunder'ı kullanın.
Tamam, bu
dunder next metoduna sahip tüm nesnelere
iterator denir.
Bunun gibi tüm üreteçler yineleyicidir, ancak
tersi geçerli değildir.
Böylece sayı üretmeyen yineleyicilere sahip olabilirsiniz.
Örneğin, ilk sayı üretecinizi üreteç değil de
ilk yüz yineleyici gibi bir listenin bir kısmını döndürecek
şekilde değiştirirseniz, burada self yazan bir init
yönteminiz olabilir.
sayılar,
bir, iki, üç, dört, beş.
Açıkçası, ilk yüz değil,
bu ilk beş yineleyici, öz I sıfırdır.
İşte bu, döndürmeye başlayacağınız dizindir.
Sıfır ve geri gönderdiğimiz sayılar
birden beşe kadar.
Sonra yine buradaki bir sonraki yöntem, I'nın len'den daha az olup olmadığını
söyleyecektir. numbers, return
self. Numaralar I.
Değil mi?
Aksi takdirde yinelemeyi durdurun.
Üzgünüm, o kadar iyi göremiyorsunuz
ama işte.
Yani burada yaptığımız tek şey, hiçbir şey üretmiyor olmamız.
Diyoruz ki, eğer I daha küçükse,
bu arada, elbette bunu yapmalıyız, I artı bire
eşit olmalı ve akımı döndürmeliyiz.
Bir artırmalıyız ve tabii
ki I'yı da bir artırmalıyız.
Tekrar ediyorum, yeni rakamlar üretmiyoruz.
Şu anda bulunduğumuz endeksi takip ediyoruz, bunu
bir şekilde yapmak zorundasınız, bu kendi kendine
olmalı. Bu arada.
Bu örneği aslında hazırlamadığımı anlayabilirsiniz, ancak size
tüm üreteçlerin, tüm yineleyicilerin
üreteç olmak zorunda olmadığını hızlıca göstermek
istedim.
Bu durumda, sayıları oluşturmazsınız,
onları bir listeden döndürürsünüz.
Kısa bir örnek vereyim.
Eğer eklemeyi hatırlayabilirsem, bunu bölümün
örnek kodunda bulabilirsiniz.
Burada, next metodunu tanımladığımızda yaptığımız şey, next
fonksiyonunu çağırarak
tek tek üzerinden geçebileceğiniz bir iterator
tanımlamaktır.
Tüm sayıları üretmek zorunda değildir, ancak üretebilir, ancak yine
de bunları bir listeden, gönderilenlerden veya başka herhangi
bir yerden de döndürebilir.
Yani Python'da bu önemlidir.
Yineleyiciler, dunder next yöntemine
sahip olan nesnelerdir.
Onlardan sonra arayabilirsin.
Kendimize ait bir yineleyicimiz
var, ancak genimde,
genimde I için yapamayız.
Bunu yapamazsınız.
Bunu sana hemen söyleyeyim.
Bunu çalıştırırsak, ilk 100 jeneratör nesnesinin yinelenebilir
olmadığını söyleyen bir hata alırsınız, ancak az
önce bunun bir yineleyici olduğunu söyledim ve bu bir yineleyicidir.
Bir yineleyicinin anlamı, üzerinde
sonraki işlevi çağırabileceğiniz
ve size bir sonraki değeri vereceğidir.
Ancak bir yineleyici ve bir yinelenebilir farklı şeylerdir.
Bir iterable üzerinde yineleme yapabilirsiniz
ve iterator bir diziden veya oluşturulan değerlerden bir sonraki
değeri almak için kullanılır.
Yani burada elimizde bir yinelenebilir
değil bir yineleyici var.
Bir sonraki videoda bir yinelenebilir
dosyayı nasıl oluşturacağımızı
öğreneceğiz, böylece üzerinde döngü
yapabiliriz ya da gerçekten genlerimin toplamı gibi şeyler yapabiliriz
ya da bilirsiniz, yapmak istediğiniz her neyse.
Genlerimin listesi.
Buradaki şeyler bir yineleyiciye değil bir yinelenebilire ihtiyaç duyar.
Bunu bir sonraki videoda yapalım.
Orada görüşürüz.