Iteratorer i Python

Iteratorer i Python

Den här artikeln förklarar iteratorer i Python.

YouTube Video

Iteratorer i Python

Översikt

I Python är en iterator en grundläggande mekanism för att bearbeta element i samlingar som listor, tupler och ordböcker ett i taget.

Vad är en iterator?

En iterator är ett objekt som kan returnera element ett i taget. I Python betraktas ett objekt som en iterator om det uppfyller följande två villkor:.

  • Det har en __iter__()-metod som returnerar sig själv.
  • Det har en __next__()-metod som returnerar nästa element. Det ger ett StopIteration-undantag när det inte finns fler element.
1iterator = iter([1, 2, 3])
2print(next(iterator))  # 1
3print(next(iterator))  # 2
4print(next(iterator))  # 3
5# print(next(iterator))  # StopIteration occurs
  • I denna kod används funktionen iter() för att konvertera en lista till en iterator, och funktionen next() används för att hämta och visa varje element ett i taget.

Skillnad från Iterable

En itererbar är ett objekt som implementerar __iter__()-metoden och kan användas i en for-slinga. Listor och tupler är exempel på itererbara objekt.

1nums = [10, 20, 30]
2it = iter(nums)  # Get an iterator from the iterable
3print(next(it))  # 10
  • Denna kod är ett exempel på att få en iterator från ett itererbart objekt som en lista och hämta element i ordning med hjälp av next().

Så här kontrollerar du:

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
  • Denna kod bekräftar att nums är ett itererbart objekt men inte en iterator, medan it, som erhålls med iter(nums), är en iterator.

Relation mellan for-loopar och iteratorer

En for-slinga i Python fungerar internt enligt följande:.

1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4    try:
5        value = next(iterator)
6        print(value)
7    except StopIteration:
8        break
  • Som visat, använder for-slingan implicit en iterator för att utföra iterationen.

Skapa en egen iterator

Du kan skapa en egen iterator med hjälp av en klass.

 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
  • Denna kod definierar en anpassad iterator som räknar ned med hjälp av klassen Countdown och skriver ut siffrorna från 3 till 1 med en for-slinga.

Skillnad mellan iteratorer och generatorer, och när du bör använda vardera

Generatorer erbjuder funktionalitet liknande iteratorer. De tillåter dig att definiera iteratorer mer kortfattat.

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
  • Denna kod definierar en generatorfunktion som räknar ned med hjälp av yield och skriver ut siffrorna från 3 till 1 med en for-slinga.

Skillnader mellan iteratorer (klass) och generatorer (funktion)

Det finns följande skillnader mellan iteratorer (klasser) och generatorer (funktioner):.

Funktion Iterator (klass) Generator (funktion)
Definition __iter__() + __next__() Funktion som använder yield
Tillståndshantering Manuell hantering av attribut krävs Hanterar tillstånd automatiskt
Läsbarhet Kan bli komplicerat Enkelt och tydligt
  • Skillnad i hur de definieras En iterator definieras genom att manuellt skriva två metoder: __iter__() och __next__(). En generator däremot är bara en funktion som använder yield-nyckelordet, vilket gör koden mycket enklare.

  • Skillnad i tillståndshantering Med en iterator måste du hantera aktuellt tillstånd och framsteg manuellt med hjälp av variabler. Generatorer däremot behåller automatiskt sitt tillstånd internt i Python, vilket minskar manuellt arbete.

  • Kodläsbarhet Iteratorer tenderar att bli komplexa eftersom de kräver flera metoder och manuell tillståndshantering. Generatorer däremot använder enkel syntax, vilket gör dem lättare att förstå även för nybörjare.

Standardbibliotek för att använda iteratorer: itertools

itertools, ett standardbibliotek i Python, erbjuder kraftfulla verktyg för att arbeta 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 innehåller även många andra funktioner som cycle, repeat, chain, islice och tee.

Användningsområden för iteratorer

Användningsområden för iteratorer inkluderar följande:.

  • Bearbeta rader i en fil: Läs rader en och en från en fil som en iterator.
  • Minneseffektiv bearbetning: Bearbeta stora mängder data sekventiellt.
  • Representation av oändliga sekvenser: Använd funktioner som itertools.count().

Sammanfattning

  • En iterator är ett objekt som kan hämta nästa värde i ordning.
  • Du kan skapa en egen iterator genom att definiera __iter__() och __next__().
  • De hanteras automatiskt via for-loopar eller funktionen next().
  • Att använda generatorer eller itertools möjliggör effektivare bearbetning.

Genom att använda iteratorer kan du bearbeta stora datamängder sekventiellt på ett minnesvänligt sätt, vilket medger kontrollerad tillståndshantering och förbättrad prestanda i programmet.

Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.

YouTube Video