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
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 |
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)) |
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.