Python Iterators
Python Iterators
'n Iterator is 'n voorwerp wat 'n telbare aantal waardes bevat.
'n Iterator is 'n voorwerp waarop herhaal kan word, wat beteken dat jy deur al die waardes kan beweeg.
Tegnies, in Python, is 'n iterator 'n voorwerp wat die iterator-protokol implementeer, wat bestaan uit die metodes __iter__()
en __next__()
.
Iterator vs Iterable
Lyste, tupels, woordeboeke en stelle is almal herhaalbare voorwerpe. Dit is herhaalbare houers waaruit u 'n iterator kan kry.
Al hierdie voorwerpe het 'n iter()
metode wat gebruik word om 'n iterator te kry:
Voorbeeld
Gee 'n iterator van 'n tupel terug en druk elke waarde:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Selfs stringe is herhaalbare voorwerpe en kan 'n iterator terugstuur:
Voorbeeld
Strings is ook herhaalbare voorwerpe, wat 'n reeks karakters bevat:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Loop deur 'n Iterator
Ons kan ook 'n for
lus gebruik om deur 'n herhaalbare voorwerp te herhaal:
Voorbeeld
Herhaal die waardes van 'n tupel:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
Voorbeeld
Herhaal die karakters van 'n string:
mystr = "banana"
for x in mystr:
print(x)
Die for
lus skep eintlik 'n iterator-objek en voer die volgende () metode vir elke lus uit.
Skep 'n Iterator
Om 'n objek/klas as 'n iterator te skep, moet jy die metodes
__iter__()
en
__next__()
na jou objek implementeer.
Soos jy in die Python Classes/Objects- hoofstuk geleer het, het alle klasse 'n funksie genaamd
__init__()
, wat jou toelaat om 'n mate van inisiasie te doen wanneer die voorwerp geskep word.
Die __iter__()
metode tree soortgelyk op, jy kan bewerkings doen (initialisering ens.), maar moet altyd die iterator-voorwerp self terugstuur.
Die __next__()
metode laat jou ook toe om bewerkings te doen, en moet die volgende item in die volgorde terugstuur.
Voorbeeld
Skep 'n iterator wat nommers terugstuur, wat begin met 1, en elke ry sal met een vermeerder (wat 1,2,3,4,5 ens. gee):
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopIterasie
Die voorbeeld hierbo sal vir ewig voortduur as jy genoeg volgende()-stellings het, of as dit in 'n
for
lus gebruik is.
Om te verhoed dat die herhaling vir ewig voortduur, kan ons die
StopIteration
stelling gebruik.
In die __next__()
metode kan ons 'n beëindigende voorwaarde byvoeg om 'n fout op te wek as die iterasie 'n gespesifiseerde aantal kere gedoen word:
Voorbeeld
Stop na 20 herhalings:
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass =
MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)