Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Generatorfunktioner | Specifikation av funktionsreturvärde
Pythonfunktioner Handledning
Avsnitt 4. Kapitel 4
single

single

Generatorfunktioner

Svep för att visa menyn

Note
Definition

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.

Note
Definition

Ett iteratorobjekt är ett objekt som implementerar iteratorprotokollet genom att definiera metoderna __iter__() och __next__(). Detta gör det möjligt att hämta element ett i taget med next(), vilket möjliggör iteration över objekt i sekvenser eller generatorfunktioner.

Den främsta fördelen med generatorfunktioner är deras minnes­effektivitet. 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:

12345678910
def 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:

1234567
def 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
Note
Notering

När en generator är uttömd (inga fler värden att yielda), kommer ett anrop till next() att utlösa ett StopIteration-undantag. En for-loop hanterar detta automatiskt.

Uppgift

Svep för att börja koda

Implementera en generatorfunktion even_numbers som genererar jämna tal inom ett givet intervall.

  1. Definiera en generatorfunktion even_numbers som tar två parametrar: start och stop.
  2. Använd en while-loop för att iterera så länge start är mindre än eller lika med stop.
  3. Använd yield för att returnera start endast om det är jämnt (delbart med 2).
  4. Öka start med 1 efter varje iteration.
  5. Använd en for-loop för att skriva ut alla genererade värden.

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 4
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