Python Academy · leksjon

Generatoruttrykk

Opprett late sekvenser med generatoruttrykk for effektiv minnebruk.

Leksjon 3 av 414 trinn

Generatoruttrykk er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Introduksjon

Generatoruttrykk er late listeforståelser – de produserer verdier én om gangen uten å bygge en liste i minnet.

Syntaks for generatoruttrykk

(expression for item in iterable) bruker parenteser. Det returnerer et generatorobjekt, IKKE en liste.
gen = (x**2 for x in range(5))
print(gen)  # generator object
print(next(gen))  # 0
print(next(gen))  # 1

Minneeffektivitet

En generator holder bare én verdi om gangen. sum(x**2 for x in range(10**7)) bruker O(1) minne sammenlignet med en liste.
total = sum(x**2 for x in range(100))
print(total)

Forbruke en generator

Generatorer forbrukes én gang. Etter at generatoren er tømt, oppstår StopIteration, og det er ikke flere verdier igjen.
gen = (x for x in range(3))
for val in gen:
    print(val)
# gen is now exhausted

Generator som funksjonsargument

Hvis en generator er det eneste argumentet, kan du utelate de ekstra parentesene: sum(x**2 for x in range(10)).
print(sum(x**2 for x in range(10)))
print(max(len(w) for w in ['cat', 'elephant', 'ant']))

Koble sammen generatorer

Du kan koble sammen generatorer på en lat måte: evens = (x for x in range(100) if x%2==0); big = (x for x in evens if x>50).
evens = (x for x in range(100) if x % 2 == 0)
big_evens = (x for x in evens if x > 50)
print(list(big_evens))

Konvertere til List/Tuple

list(gen) eller tuple(gen) materialiserer alle verdiene. Gjør dette når du trenger tilfeldig tilgang eller flere gjennomløp.
gen = (x**2 for x in range(5))
print(list(gen))

Generatoruttrykk kontra listeforståelse

Bruk generator når du bare itererer én gang, eller når datasettet er stort. Bruk liste når du trenger len(), indeksering eller flere gjennomløp.
import sys
lst = [x**2 for x in range(1000)]
gen = (x**2 for x in range(1000))
print(sys.getsizeof(lst), sys.getsizeof(gen))

Uendelige generatorer

itertools.count(0) er en uendelig teller. Kombiner den med islice for å hente bare det du trenger.
import itertools
first10 = list(itertools.islice(itertools.count(0), 10))
print(first10)

any() og all() med generatorer

any(x>5 for x in lst) avslutter tidlig – den stopper ved første True. all() stopper ved første False. Dette er svært effektivt.
nums = [1, 3, 7, 2]
print(any(x > 5 for x in nums))
print(all(x > 0 for x in nums))

Datapipelines

Koble transformasjoner sammen på en lat måte: data → filter → transform → aggregate. Hvert trinn er en generator; ingenting kjøres før det trengs.
data = range(1000)
filtered = (x for x in data if x % 7 == 0)
transformed = (x * 2 for x in filtered)
print(sum(transformed))

Hurtigsjekk

Hva er den viktigste minnefordelen med et generatoruttrykk sammenlignet med en listeforståelse?

Oppsummering

Generatoruttrykk: (expr for x in it). Lat evaluering – O(1) minne. Forbrukes én gang. Brukes med sum/any/all/max. Konverter til en liste når du trenger flere gjennomløp.

Fortsett

Utmerket! Fortsett til neste leksjon for å utvikle ferdighetene dine videre.
Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «Generatoruttrykk» gratis?

Ja – hele teksten i «Generatoruttrykk» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Generatoruttrykk»?

Opprett late sekvenser med generatoruttrykk for effektiv minnebruk. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Generatoruttrykk»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. List comprehensions
  2. Set- og dict-comprehensions
  3. Generatoruttrykk
  4. Nøkkelordet yield
← Tilbake til Python Academy