Neden böyle [generatör]

arkadaşlar bu kod:

generator = (i for i in range(5))


print(generator, type(generator))

#çıktı : <generator object <genexpr> at 0x02C8FD70> <class 'generator'>

iken neden bu tuple tipinde

generator = (1,2,3,4,5)


print(generator, type(generator))

#çıktı : (1, 2, 3, 4, 5) <class 'tuple'>

Çünkü biri tuple tanımlıyor biri de generator. Parantezler aklınızı karıştırmasın.

Bu sözdizimi bir generator tanımlar. Tuple kısmını zaten biliyorsunuzdur. Eğer bu generatoru bir tuple’a dönüştürmek isterseniz bunu yazmanız yeterli:

generator = (i for i in range(5))
print(tuple(generator))

peki anlatabilir misiniz generatör nedir ?
bu cevaptan sonra bu konuyu tam anlayamadığımı anladım lütfen yardımcı olun

Generatorler, hafızada yer kaplamaz.

a = (i for i in range(10 ** 10))

Yukarıdaki kodu tanımladığınız zaman döndürülen veri bir generatör olur ve generatör içerisindeki elemanlar, sırası gelince hafızada yer kaplamaya başlarlar.

Ama aşağıdaki kod bir üreteç değildir.

a = [i for i in range(10 ** 10)]

Bu kodu çalıştırır çalıştırmaz, hafızada yer kaplamaya başlar.

Generatorlerdeki elemanlara ulaşmak için next() fonksiyonu kullanılır.

>>> a = (i for i in range(10 ** 10))
>>> next(a)
0
>>> b = [i for i in range(10)]
>>> next(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not an iterator
>>> 
1 Beğeni

Bir parantez unutmuşsunuz.

1 Beğeni