Python Iterator
- Föregående sida Python Återgående
- Nästa sida Python Omfattning
Python Iterator
En iterator är ett objekt som innehåller ett antal värden som kan räknas.
En iterator är ett iterablat objekt, vilket innebär att du kan traversera alla värden.
Tekniskt sett är en iterator ett objekt som implementerar iteratorprotokollet och innehåller metoder __iter__()
och __next__()
.
Iterator VS Iterabla objekt (Iterable)
listor, tupler, ordningar och uppsättningar är iterabla objekt. De är iterabla behållare där du kan få tag på en iterator (Iterator).
Alla dessa objekt har en metod för att få tag på en iterator iter()
Metod:
Exempel
Returnera en iterator från en tupel och skriv ut varje värde:
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Och till och med strängar är iterabla objekt och kan returnera en iterator:
Exempel
Strängar är också iterabla objekt som innehåller en serie tecken:
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
Traversera iteratorn
Vi kan också använda en for-slinga för att traversera iterabla objekt:
Exempel
Iterera över värdena i en tupel:
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Exempel
Iterera över tecknen i en sträng:
mystr = "banana" for x in mystr: print(x)
Tips:en for-slinga skapar faktiskt en iteratorobjekt och utför next()
metod.
att skapa en iterator
För att skapa ett objekt/klass som en iterator måste objektet implementera __iter__()
och __next__()
metod.
Som du lärde dig i kapitlet om Python-klasser/objekt, har alla klasser en metod med namnet __init__()
Funktionen, som tillåter dig att utföra några initialiseringar vid skapandet av objekt.
__iter__()
Metoden fungerar på ett liknande sätt, du kan utföra operationer (initialisering osv) men måste alltid returnera iteratorobjektet själv.
__next__()
Metoden tillåter också att du utför operationer och måste returnera nästa objekt i sekvensen.
Exempel
Skapa en iterator som returnerar tal, börjar från 1 och ökar varje sekvens med 1 (returnerar 1, 2, 3, 4, 5 osv):
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))
StopIteration
Om du har tillräckligt med next()
satser, eller använda dem i en for-sats, så kommer ovanstående exempel att fortsätta för evigt.
För att förhindra att iterationen fortsätter för evigt kan vi använda StopIteration
satser.
i __next__()
I en metod, om iterationen slutförs efter det specificerade antalet gånger, kan vi lägga till en avbrytelsevillkor för att utlösa ett fel:
Exempel
Stoppa efter 20 iterationer:
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)
- Föregående sida Python Återgående
- Nästa sida Python Omfattning