Iteratorer i Python
Denne artikkelen forklarer iteratorer i Python.
YouTube Video
Iteratorer i Python
Oversikt
I Python er en iterator en grunnleggende mekanisme for å behandle elementer i samlinger som lister, tupler og ordbøker ett om gangen.
Hva er en iterator?
En iterator er et objekt som kan returnere elementer ett om gangen. I Python regnes et objekt som en iterator hvis det oppfyller følgende to betingelser:.
- Den har en
__iter__()
-metode som returnerer seg selv. - Den har en
__next__()
-metode som returnerer neste element. Den kasterStopIteration
når det ikke finnes flere elementer.
1iterator = iter([1, 2, 3])
2print(next(iterator)) # 1
3print(next(iterator)) # 2
4print(next(iterator)) # 3
5# print(next(iterator)) # StopIteration occurs
- I denne koden brukes
iter()
-funksjonen til å konvertere en liste til en iterator, ognext()
-funksjonen brukes til å hente og vise hvert element ett etter ett.
Forskjell fra iterables
Et iterable er et objekt som implementerer __iter__()
-metoden og kan brukes i en for
-løkke. Lister og tupler er eksempler på iterables.
1nums = [10, 20, 30]
2it = iter(nums) # Get an iterator from the iterable
3print(next(it)) # 10
- Denne koden er et eksempel på å hente en iterator fra et itererbart objekt som en liste, og hente ut elementene i rekkefølge ved å bruke
next()
.
Slik kan du sjekke:
1from collections.abc import Iterable, Iterator
2
3nums = [10, 20, 30]
4it = iter(nums)
5
6print(isinstance(nums, Iterable)) # True
7print(isinstance(nums, Iterator)) # False
8print(isinstance(it, Iterator)) # True
- Denne koden bekrefter at
nums
er et itererbart objekt, men ikke en iterator, mensit
, som er hentet ved å brukeiter(nums)
, er en iterator.
Forholdet mellom for-løkker og iteratorer
En for
-løkke i Python fungerer internt slik:.
1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4 try:
5 value = next(iterator)
6 print(value)
7 except StopIteration:
8 break
- Som vist, bruker
for
-løkken implisitt en iterator til å utføre iterasjon.
Å lage en egendefinert iterator
Du kan lage en egendefinert iterator ved å bruke en klasse.
1class Countdown:
2 def __init__(self, start):
3 self.current = start
4
5 def __iter__(self):
6 return self
7
8 def __next__(self):
9 if self.current <= 0:
10 raise StopIteration
11 value = self.current
12 self.current -= 1
13 return value
14
15for num in Countdown(3):
16 print(num) # 3, 2, 1
- Denne koden definerer en egendefinert iterator som teller ned ved hjelp av
Countdown
-klassen, og skriver ut tallene fra 3 til 1 med enfor
-løkke.
Forskjell mellom iteratorer og generatorer, og når man skal bruke hver av dem
Generatorer gir funksjonalitet som ligner på iteratorer. De gjør det mulig å definere iteratorer mer konsist.
1def countdown(n):
2 while n > 0:
3 yield n
4 n -= 1
5
6for i in countdown(3):
7 print(i) # 3, 2, 1
- Denne koden definerer en generatorfunksjon som teller ned ved hjelp av
yield
, og skriver ut tallene fra 3 til 1 med enfor
-løkke.
Forskjeller mellom iteratorer (klasse) og generatorer (funksjon)
Det finnes følgende forskjeller mellom iteratorer (klasser) og generatorer (funksjoner):.
Egenskap | Iterator (klasse) | Generator (funksjon) |
---|---|---|
Definisjon | __iter__() + __next__() |
Funksjon som bruker yield |
Tilstandshåndtering | Krever manuell håndtering av attributter | Håndterer tilstand automatisk |
Lesbarhet | Kan bli kompleks | Enkel og tydelig |
-
Forskjell i hvordan de defineres En iterator defineres ved manuelt å skrive to metoder:
__iter__()
og__next__()
. I motsetning til dette er en generator bare en funksjon som brukeryield
-nøkkelordet, noe som gjør koden langt enklere. -
Forskjell i tilstandshåndtering Med en iterator må du håndtere gjeldende tilstand og fremdrift manuelt ved bruk av variabler. Generatorer derimot, beholder automatisk tilstanden internt i Python, noe som reduserer manuelt arbeid.
-
Kodelesbarhet Iteratorer kan bli komplekse fordi de krever flere metoder og manuell tilstandshåndtering. I motsetning til dette har generatorer enkel syntaks, noe som gjør dem enklere å forstå selv for nybegynnere.
Standardbibliotek for bruk av iteratorer: itertools
itertools
, et standardbibliotek i Python, gir kraftige verktøy for å arbeide med iteratorer.
1import itertools
2
3for x in itertools.count(10, 2): # 10, 12, 14, ...
4 if x > 20:
5 break
6 print(x)
- Det inneholder også mange andre funksjoner som
cycle
,repeat
,chain
,islice
ogtee
.
Bruksområder for iteratorer
Bruksområder for iteratorer inkluderer følgende:.
- Behandle fil-linjer: Les linjer én etter én fra en fil som en iterator.
- Minneeffektiv behandling: Prosesser store mengder data sekvensielt.
- Representere uendelige sekvenser: Bruk funksjoner som
itertools.count()
.
Sammendrag
- En iterator er et objekt som kan hente neste verdi sekvensielt.
- Du kan lage en egendefinert iterator ved å definere
__iter__()
og__next__()
. - De håndteres automatisk via
for
-løkker ellernext()
-funksjonen. - Å bruke generatorer eller
itertools
gir mer effektiv behandling.
Ved å bruke iteratorer kan du behandle store datamengder sekvensielt på en minneeffektiv måte, noe som gir kontrollert tilstandshåndtering og bedre programytelse.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.