single
Uendelige generatorer
Sveip for å vise menyen
Husk at yield pauser en generator og gjenopptar den ved neste next()-kall. Så langt har generatorene du har sett hatt et tydelig stoppunkt. Men generatorer blir spesielt kraftige når de kombineres med en uendelig løkke – de produserer verdier uendelig uten å lagre dem i minnet.
Uendelige generatorer med while True
Ved å bruke en while True-løkke inne i en generator opprettes en uendelig sekvens – noe som ville vært umulig å lagre som en liste. Generatoren produserer kun neste verdi når next() kalles:
1234567891011def counter(): count = 1 while True: # Runs forever yield count # Return current value and pause count += 1 # Resume from here on the next call gen = counter() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3
Uansett hvor mange ganger du kaller next(), vil generatoren alltid ha en ny verdi klar – den ligger aldri foran eller lagrer verdier i minnet.
Kontrollere en uendelig generator
Siden generatoren kjører uendelig, må du kontrollere hvor mange verdier du henter ut. Den vanligste måten er å bruke en for-løkke med range():
12345678910def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Aldri iterer over en uendelig generator med en vanlig for-løkke uten en stoppbetingelse – det vil kjøre evig og krasje programmet ditt.
Sveip for å begynne å kode
Generer unike bruker-ID-er ved hjelp av en uendelig generatorfunksjon. id_generator()-funksjonen skal kontinuerlig produsere identifikatorer som "ID_1", "ID_2" osv.
- Initialiser variabelen
countmed verdien 1, siden identifikatorene starter fra 1. - Bruk en uendelig
while-løkke for å kontinuerlig generere identifikatorer. - Bruk
yieldfor å returnere gjeldende identifikator i formatetf"ID_{count}". - Øk
countmed 1 etter hver iterasjon. - Initialiser generatorobjektet
id_genved å kalleid_generator().
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår