Generatorer
Generatorer är en form av "lata" listbyggare som inte beräknar hela sitt innehåll på en gång.
Låt oss titta på ett exempel. Antag att vi har en funktion is_prime
som testar om ett tal är ett primtal. Vi vill skriva ut de 1000 första primtalen. Då kan vi göra så här:
= [i for i in range(1, 1000000000) if is_prime(i)]
primes
= 0
num_primes for prime in primes:
print(prime)
+= 1
num_primes if num_primes == 1000:
break
Vi vet inte hur många tal vi måste söka genom innan vi hittar 1000 primtal, så för säkerhetsskull tar vi i och letar efter alla primtal upp till en miljard.
Detta har vissa nackdelar. Det tar väldigt lång tid att söka genom en miljard tal, och det är först när detta är klart som vi kan gå vidare. Dessutom tar det mycket minne att lagra alla primtal.
Men vi behöver ju faktiskt bara ett primtal i taget, inte hela listan. Då kan vi istället använda vanliga parenteser istället för hakparenteser, så blir uttrycket ett så kallat generatoruttryck:
= (i for i in range(1, 1000000000) if is_prime(i))
primes
= 0
num_primes for prime in primes:
print(prime)
+= 1
num_primes if num_primes == 1000:
break
Det här ser nästan ut som tidigare, men nu är primes
inte alls en lista utan en generator. Det är inte förrän vi ber om ett element från generatorn (i for
-loopen) som den börjar testa olika värden på i
. Den testar bara till den hittar nästa heltal som uppfyller is_prime(i)
och returnerar sedan detta. Nästa gång man ber om ett heltal fortsätter den leta där den slutade förra gången.
I den här kursen behöver du inte kunna skapa egna generatoruttryck, men det kan vara bra att känna igen dem om du stöter på dem i annan kod.
Läs mer om iteratorer och generatorer i Pythons tutorial.
Sidansvarig: Peter Dalenius
Senast uppdaterad: 2025-08-06