Enumerate() fonksiyonun işlevi hakkında

print(*enumerate("istihza")) 
Çıktı : (0, 'i') (1, 's') (2, 't') (3, 'i') (4, 'h') (5, 'z') (6, 'a')

“enumerate()” fonksiyonu yukarıdaki gibi yıldız olmadan kullanılınca " <enumerate object at 0x000001D7055F4F00>" çıktısını veriyor. Yıldızın işlevini parçalamak olarak biliyorum. Fakat burada tam olarak yaptığı işlevi anlamadım. Neyi parçaladı burada ?

Merhaba,

enumerate aslında bir fonksiyon değil, bir sınıftır ve enumerate() diye çağırınca bu sınıfın yapıcı fonksiyonu olan __init__ metodu çalıştırılır ve bir tane enumerate nesnesi yaratılır. enumerate nesnesi bir Iterator'dür.

import collections

print(isinstance(enumerate([]), collections.Iterator))

Siz, enumerate("istihza") yazınca da bir iterator oluşturulur. Ve bir iterator'de bulunan nesnelere erişmek için next fonksiyonunu kullanabilirsiniz.

x = enumerate("istihza")
print(next(x))

Bu kod bize, (0, 'i') çıktısını verecektir. next fonksiyonunu x için ikinci kez çağırdığımızda bu kez (1, s) çıktısını alacağız.

enumerate("istihza") nesnesinde yer alan elemanları şöyle listeleyebilirsiniz.

for i in enumerate("istihza"):
    print(i)

Bu da bize aşağıdaki çıktıyı verecektir:

(0, 'i')
(1, 's')
(2, 't')
(3, 'i')
(4, 'h')
(5, 'z')
(6, 'a')

Sizin de dediğiniz gibi * karakteri, yinelenebilir bir verinin elemanlarını açığa çıkarttığı için,
print(*enumerate("istihza")) yazdığınızda, çıktı olarak (0, 'i') (1, 's') (2, 't') (3, 'i') (4, 'h') (5, 'z') (6, 'a') ifadesini alırsınız.

1 Beğeni

for döngüsü ile kullanılabilen nesnelere iterable diyoruz. tuple, str ve list örnekleri for döngüsü ile birlikte kullanılabiliyorlar, bu yüzden iterable’lar:

>>> for i in "hede":
	print(i)

	
h
e
d
e
>>> for i in [1, 2, 3]:
	print(i)

	
1
2
3
>>> for i in (3, 2, 1):
	print(i)

	
3
2
1
>>> 

enumerate örneklerini de for döngüsü ile birlikte kullanabiliyoruz, yani onlar da birer iterable:

>>> for i in enumerate("hede"):
	print(i)

	
(0, 'h')
(1, 'e')
(2, 'd')
(3, 'e')
>>> 

Gösterdiğiniz * sözdizimi de sadece iterable’lar ile kullanılabiliyor, ve hepsinde for döngüsü ile benzer bir işlevi yerine getiriyor:

>>> print(*"hede")
h e d e
>>> print(*enumerate("hede"))
(0, 'h') (1, 'e') (2, 'd') (3, 'e')
>>> 
1 Beğeni