single
Oneindige Generatoren
Veeg om het menu te tonen
Onthoud dat yield een generator pauzeert en deze hervat bij de volgende next()-aanroep. Tot nu toe hadden de generators die je hebt gezien een duidelijk eindpunt. Maar generators worden bijzonder krachtig wanneer ze worden gecombineerd met een oneindige lus – waarbij waarden oneindig worden geproduceerd zonder ze ooit in het geheugen op te slaan.
Oneindige generators met while True
Het gebruik van een while True-lus binnen een generator creëert een oneindige reeks – iets dat onmogelijk als lijst kan worden opgeslagen. De generator produceert alleen de volgende waarde wanneer next() wordt aangeroepen:
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
Hoe vaak je next() ook aanroept, de generator heeft altijd een nieuwe waarde klaar – hij loopt nooit vooruit en slaat geen waarden op in het geheugen.
Een oneindige generator beheersen
Omdat de generator oneindig doorgaat, moet je bepalen hoeveel waarden je wilt ophalen. De meest gebruikelijke manier is met een for-lus en 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
Nooit itereren over een oneindige generator met een gewone for-lus zonder stopvoorwaarde – dit blijft oneindig doorgaan en zal je programma laten vastlopen.
Veeg om te beginnen met coderen
Genereer unieke gebruikers-ID's met behulp van een oneindige generatorfunctie. De functie id_generator() moet voortdurend identificaties produceren zoals "ID_1", "ID_2", enz.
- Initialiseer de variabele
countmet de waarde 1, aangezien identificaties beginnen bij 1. - Gebruik een oneindige
while-lus om voortdurend identificaties te genereren. - Gebruik
yieldom de huidige identificatie in het formaatf"ID_{count}"terug te geven. - Verhoog
countmet 1 na elke iteratie. - Initialiseer het generatorobject
id_gendoorid_generator()aan te roepen.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.