Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Oändliga Generatorer | Specifikation av funktions returvärde
Pythonfunktioner Handledning
Avsnitt 4. Kapitel 5
single

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:

1234567891011
def 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():

12345678910
def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Note
Observera

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.

Uppgift

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.

  1. Initiera variabeln count med värdet 1, eftersom identifierare börjar från 1.
  2. Använd en oändlig while-loop för att kontinuerligt generera identifierare.
  3. Använd yield för att returnera aktuell identifierare i formatet f"ID_{count}".
  4. Inkrementera count med 1 efter varje iteration.
  5. Initiera generatorobjektet id_gen genom att anropa id_generator().

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 5
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt