Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Generaattorifunktiot | Funktion Paluuarvon Määrittely
Python-funktioiden Opas
Osio 4. Luku 4
single

single

Generaattorifunktiot

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

Generaattorifunktio on erityinen funktiotyyppi, joka käyttää yield-avainsanaa return-avainsanan sijaan tuottaakseen arvojonoja. Kun generaattorifunktiota kutsutaan, se palauttaa iteraattori-olion, jota voidaan iteroida arvojen hakemiseksi yksi kerrallaan.

Generaattorifunktioiden tärkein etu on niiden muistitehokkuus. Sen sijaan, että koko jono luotaisiin etukäteen ja tallennettaisiin muistiin, generaattorit tuottavat arvot tarvittaessa.

Miten yield toimii

Toisin kuin return, joka lopettaa funktion suorittamisen kokonaan, yield keskeyttää funktion ja tallentaa sen tilan. Kun next() kutsutaan seuraavan kerran, generaattori jatkaa täsmälleen siitä kohdasta, mihin se jäi:

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

Generaattoria voi myös iteroida for-silmukalla – se kutsuu automaattisesti next()-funktiota, kunnes generaattori on tyhjä:

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
Huomio

Kun generaattori on käytetty loppuun (ei ole enää arvoja palautettavana), sen kutsuminen next()-funktiolla aiheuttaa StopIteration-virheen. for-silmukka käsittelee tämän automaattisesti.

Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Toteuta even_numbers-generaattorifunktio, joka tuottaa parillisia lukuja annetulla välillä.

  1. Määrittele generaattorifunktio even_numbers, joka ottaa kaksi parametria: start ja stop.
  2. Käytä while-silmukkaa iteroimaan niin kauan kuin start on pienempi tai yhtä suuri kuin stop.
  3. Käytä yield-lausetta palauttamaan start vain, jos se on parillinen (jaollinen luvulla 2).
  4. Kasvata start yhdellä jokaisen iteraation jälkeen.
  5. Käytä for-silmukkaa tulostaaksesi kaikki generoidut arvot.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt