Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Johdanto Generaattoreihin: Arvojen Tuottaminen Tehokasta Iteraatiota Varten | Iteraattoreiden ja Generaattoreiden Hallinta Pythonissa
Pythonin Rakenteellinen Ohjelmointi

bookJohdanto Generaattoreihin: Arvojen Tuottaminen Tehokasta Iteraatiota Varten

Generaattorit yksinkertaistavat laiskaa arviointia tarjoamalla tiiviin ja luettavan tavan luoda iteraattoreita. Iteraattori toteutetaan luokkana, jossa on __iter__()- ja __next__()-metodit, kun taas generaattori toteutetaan funktiolla, joka käyttää yield-avainsanaa tuottaakseen arvoja yksi kerrallaan. Generaattorit säilyttävät tilansa automaattisesti kutsujen välillä, mikä tekee niistä intuitiivisempia ja tehokkaampia monissa käyttötapauksissa.

Generaattori on erityinen funktiotyyppi, joka:

  1. Käyttää yield-avainsanaa returnin sijaan;
  2. Keskeyttää suorituksen ja säilyttää tilansa, kun yield kutsutaan;
  3. Jatkaa suoritusta siitä, mihin jäi, kun generaattoria kutsutaan uudelleen.
123456789
def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
copy
12345678910
import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
copy

Erot iteratorin ja generaattorin välillä

Tehtävä

Swipe to start coding

Edellisessä tehtävässä toteutit äärettömän nopanheittäjän käyttäen räätälöityä iteraattoriluokkaa. Nyt yksinkertaistat saman toiminnallisuuden käyttämällä generaattorifunktiota. Generaattorit tarjoavat tiiviin ja luettavan tavan tuottaa arvoja laiskasti yield-avainsanan avulla.

  1. Määrittele generaattorifunktio. Käytä yield-avainsanaa dice_roller-funktiossa tuottaaksesi satunnaisia nopanheittoja väliltä 1 ja 6. Käytä random.randint()-funktiota jokaisen heiton simuloimiseen.
  2. Kutsu dice_roller()-funktiota luodaksesi generaattoriobjekti ja tallenna se muuttujaan dice_generator.
  3. Käytä for-silmukkaa yhdessä enumerate()-funktion kanssa iteroidaksesi generaattorin yli. Lopeta iteraatio 10 heiton jälkeen käyttämällä if-ehtoa ja break-lausetta.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 6. Luku 4
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

What are some practical use cases for generators?

Can you explain how to convert an iterator to a generator?

Are there any limitations or drawbacks to using generators?

close

bookJohdanto Generaattoreihin: Arvojen Tuottaminen Tehokasta Iteraatiota Varten

Pyyhkäise näyttääksesi valikon

Generaattorit yksinkertaistavat laiskaa arviointia tarjoamalla tiiviin ja luettavan tavan luoda iteraattoreita. Iteraattori toteutetaan luokkana, jossa on __iter__()- ja __next__()-metodit, kun taas generaattori toteutetaan funktiolla, joka käyttää yield-avainsanaa tuottaakseen arvoja yksi kerrallaan. Generaattorit säilyttävät tilansa automaattisesti kutsujen välillä, mikä tekee niistä intuitiivisempia ja tehokkaampia monissa käyttötapauksissa.

Generaattori on erityinen funktiotyyppi, joka:

  1. Käyttää yield-avainsanaa returnin sijaan;
  2. Keskeyttää suorituksen ja säilyttää tilansa, kun yield kutsutaan;
  3. Jatkaa suoritusta siitä, mihin jäi, kun generaattoria kutsutaan uudelleen.
123456789
def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
copy
12345678910
import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
copy

Erot iteratorin ja generaattorin välillä

Tehtävä

Swipe to start coding

Edellisessä tehtävässä toteutit äärettömän nopanheittäjän käyttäen räätälöityä iteraattoriluokkaa. Nyt yksinkertaistat saman toiminnallisuuden käyttämällä generaattorifunktiota. Generaattorit tarjoavat tiiviin ja luettavan tavan tuottaa arvoja laiskasti yield-avainsanan avulla.

  1. Määrittele generaattorifunktio. Käytä yield-avainsanaa dice_roller-funktiossa tuottaaksesi satunnaisia nopanheittoja väliltä 1 ja 6. Käytä random.randint()-funktiota jokaisen heiton simuloimiseen.
  2. Kutsu dice_roller()-funktiota luodaksesi generaattoriobjekti ja tallenna se muuttujaan dice_generator.
  3. Käytä for-silmukkaa yhdessä enumerate()-funktion kanssa iteroidaksesi generaattorin yli. Lopeta iteraatio 10 heiton jälkeen käyttämällä if-ehtoa ja break-lausetta.

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 6. Luku 4
single

single

some-alt