single
Oändliga Generatorer
Svep för att visa menyn
Kom ihåg att yield pausar en generator och återupptar den vid nästa anrop av next(). Hittills har de generatorer du har sett haft en tydlig slutpunkt. Men generatorer blir särskilt kraftfulla när de kombineras med en oändlig loop – de genererar värden utan slut utan att någonsin lagra dem i minnet.
Oändliga generatorer med while True
Att använda en while True-loop inuti en generator skapar en oändlig sekvens – något som vore omöjligt att lagra som en lista. Generatorn producerar endast nästa värde när next() anropas:
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
Oavsett hur många gånger du anropar next(), kommer generatorn alltid att ha ett nytt värde redo – den ligger aldrig före eller lagrar värden i minnet.
Kontroll av en oändlig generator
Eftersom generatorn körs för alltid behöver du styra hur många värden du hämtar. Det vanligaste sättet är att använda en for-loop 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
Iterera aldrig över en oändlig generator med en vanlig for-loop utan ett stoppvillkor – den kommer att köra för alltid och krascha ditt program.
Svep för att börja koda
Generera unika användar-ID med hjälp av en oändlig generatorfunktion. Funktionen id_generator() ska kontinuerligt skapa identifierare som "ID_1", "ID_2" osv.
- Initiera variabeln
countmed värdet 1, eftersom identifierare börjar från 1. - Använd en oändlig
while-loop för att kontinuerligt generera identifierare. - Använd
yieldför att returnera aktuell identifierare i formatetf"ID_{count}". - Inkrementera
countmed 1 efter varje iteration. - Initiera generatorobjektet
id_gengenom att anropaid_generator().
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal