Python iterator

Python iterator

Vi kommer til å diskutere om Python Iterator i denne artikkelen. Iterator er et objekt med staten og husker hvor det er og når det er iterende. Det returnerer enkeltobjektet. Den bruker ITER () og Next () -metodene. Dette brukes til å danne løkker, forståelser og Python -generatorer.

Konverter enhver sekvens til iterator ved hjelp av følgende syntaks:

iter (sekvens)

For å få tilgang til neste element brukes neste () -funksjonen. Ethvert objekt i Python som støtter de to foregående metodene kalles iterator. For å sjekke dette, kjør den innebygde metoden Dir () på objektet.

Eksempel: Print (DIR (liste))

Her er listen ikke en iterator siden den ikke har metoden “__Next__”.

Hvis vi prøver å få tilgang til de neste elementene, får vi unntaket som følger:

For å konvertere den som iterator, send listen til ITER -metoden som vist i det følgende. Etter det ser vi “__Next__” -metoden.

Forskjell mellom iterator og iterable

Itable betyr at vi kan sløyfe over verdiene som liste, tuple, streng osv. Alle objekter har en iter () -metode som brukes til å få en iterator. Vi vil se noen eksempler for å forstå det bedre:

Eksempel:

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
14
15
16
17
nums = [1,2,3,4,5]
numsiterator = iter (nums) #same as numsiterator = nums.__iter __ ()
# Internt vil det kalle __iter__ Dunder -metoden
utskrift (neste (numsiterator)) # tilgang 1. element
print (neste (numsiterator)) # tilgang til 2. element
print (neste (numsiterator)) # tilgang til 3. element og så videre ..
utskrift (neste (numsiterator))
utskrift (neste (numsiterator))
utskrift (neste (numsiterator))

Når vi kommer til slutten av listen, reiser den en stoppereningsfeil.

Merk: Alt som starter med dobbeltundersøkelsen og slutter med dobbeltundersøkelsen i Python kalles Dunder -metoden.

Bruk tilfelle av iteratorer

  1. For Loop bruker iteratorer i bakgrunnen.

Eksempel 1:

Vi skriver ut hvert tegn ved hjelp av for -loopen.

1
2
3
4
5
S = "God morgen"
for røye i s:
trykk (røye)

Eksempel 2:

Vi skriver ut den samme strengen ved hjelp av iteratorene.

1
2
3
4
5
6
7
8
9
10
11
S = "God morgen"
ord = iter (er)
Mens sant:
prøve:
element = neste (ord)
trykk (vare)
Bortsett fra stopIteration:
gå i stykker
  1. En annen brukssak for iteratoren er å legge til de neste () og iter () metodene til klassen vår og gjøre det som iterable.

Eksempel 3:

For å bygge vår egen rekkeviddefunksjon, gir Range -funksjonen rekke verdier fra start til slutt (eksklusivt).

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
14
15
16
17
18
19
20
21
22
23
24
25
26
27
klasse MyRange:
def __init __ (selv, start, stopp):
selv-.val = start
selv-.stopp = stopp
def __iter __ (selv):
Returnerer selv
def __neste __ (selv):
Hvis selv.val> = selv.Stoppe:
Hev stopiteration
Nåværende = selv.Val
selv-.val += 1
Returstrøm
Nums = MyRange (1,5)
Print (NESTE (NUMS))
Print (NESTE (NUMS))
Print (NESTE (NUMS))
Print (NESTE (NUMS))
Print (NESTE (NUMS))
  1. En annen brukssak av iteratoren er Python Generators. Generatorer er normal metode som gir verdien som produksjon og den husker staten når den kalles neste gang. Generatorer er også iteratorer, men Dunder Iter () og neste () metoder opprettes automatisk.

Vi skriver forrige rekkeviddefunksjon ved hjelp av generatoren.

Eksempel 4:

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
14
15
16
def my_range (start, slutt):
Nåværende = start
Mens strøm < end:
Utbytte strøm
Nåværende += 1
nums = my_range (1,5)
Print (NESTE (NUMS))
Print (NESTE (NUMS))
Print (NESTE (NUMS))
Print (NESTE (NUMS))

Eller vi kan kalle følgende som produserer samme utgang som forrige eksempel.

1
2
3
for NUM i NUMS:
Print (Num)

Konklusjon

Iteratoren trenger ikke å ende så lenge verdien er der; det holder oss til å få verdien. Det henter en verdi om gangen. Det er virkelig nyttig når vi skriver minneffektive programmer der vi har noen mange verdier som vi ikke kan sette i minnet hvis vi legger dem i en liste eller tuple. Vi kan lagre ressursen med dette.