İterator ve Generatorlar;

Ocak 23, 2020 0 Yazar: alikperislam
## iterator : tekrar edilebilen bir işlem varsa bir sonraki adımın yapılmasını sağlar...
liste=[0,3,4,7]
iterasyon=iter(liste) # iter fonksiyonu ile liste nin iterasyona gireceğini tanımlamış oluyoruz.
print(next(iterasyon)) #next komutu sayesinde sonraki elemanı yazdırır yani şuan ilk elemanı yazdıracak.
print(next(iterasyon)) #2. eleman
print(next(iterasyon)) #3. eleman
print(next(iterasyon)) #4. eleman
#print(next(iterasyon)) #hata veriri çünkü 5. eleman dizide tanımlı değildi.

###peki listenin sonuna gelindiğini nasıl anlayabiliriz ? :
liste2=["ali","veli","beril","cihan","hamza","melek","meryem"]
itr=iter(liste2)
while(True):
try:
print(next(itr))
except StopIteration:
print("iterasyonun sonuna gelindi !")
break
class tek_sayi():
def __iter__(self):
self.sayi=1
return self
def __next__(self):
sayi=self.sayi
self.sayi+=2
return sayi
a=iter(tek_sayi())
print(next(a))
print(next(a))
print(next(a))

### generator :

def uretec():
sayi=0
print(sayi,".adım")
yield sayi # return yerine kullanılır.

sayi+=1
print(sayi,".adım")
yield sayi
a=uretec()
next(a)
next(a)
try:
next(a)
print("çalıştı.")
except StopIteration:
print("çalışmadı son.")
b=uretec()
for i in b:
print(i)