single
Generatorfunktioner
Svep för att visa menyn
En generatorfunktion är en speciell typ av funktion som använder nyckelordet yield istället för return för att generera en sekvens av värden. När en generatorfunktion anropas returnerar den ett iteratorobjekt, vilket kan itereras över för att hämta värden ett i taget.
Den främsta fördelen med generatorfunktioner är deras minneseffektivitet. Istället för att generera hela sekvensen på förhand och lagra den i minnet, producerar generatorer värden i realtid när de behövs.
Hur yield fungerar
Till skillnad från return, som avslutar funktionen helt, pausar yield funktionen och sparar dess tillstånd. Nästa gång next() anropas återupptas generatorn exakt där den pausades:
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
Du kan också iterera över en generator med en for-loop – den anropar automatiskt next() tills generatorn är slut:
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
När en generator är uttömd (inga fler värden att yielda), kommer ett anrop av next() på den att utlösa ett StopIteration-fel. En for-loop hanterar detta automatiskt.
Svep för att börja koda
Implementera en generatorfunktion even_numbers som returnerar jämna tal inom ett givet intervall.
- Definiera en generatorfunktion
even_numberssom tar två parametrar:startochstop. - Använd en
while-loop för att iterera så längestartär mindre än eller lika medstop. - Använd
yieldför att returnerastartendast om det är jämnt (delbart med 2). - Öka
startmed 1 efter varje iteration. - Använd en
for-loop för att skriva ut alla genererade värden.
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