Johdanto 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:
- Käyttää
yield-avainsanaareturnin sijaan; - Keskeyttää suorituksen ja säilyttää tilansa, kun yield kutsutaan;
- Jatkaa suoritusta siitä, mihin jäi, kun generaattoria kutsutaan uudelleen.
123456789def 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
12345678910import 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}")
Erot iteratorin ja generaattorin välillä
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.
- Määrittele generaattorifunktio. Käytä yield-avainsanaa
dice_roller-funktiossa tuottaaksesi satunnaisia nopanheittoja väliltä1ja6. Käytärandom.randint()-funktiota jokaisen heiton simuloimiseen. - Kutsu
dice_roller()-funktiota luodaksesi generaattoriobjekti ja tallenna se muuttujaandice_generator. - Käytä
for-silmukkaa yhdessäenumerate()-funktion kanssa iteroidaksesi generaattorin yli. Lopeta iteraatio10heiton jälkeen käyttämälläif-ehtoa jabreak-lausetta.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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?
Mahtavaa!
Completion arvosana parantunut arvoon 3.13
Johdanto 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:
- Käyttää
yield-avainsanaareturnin sijaan; - Keskeyttää suorituksen ja säilyttää tilansa, kun yield kutsutaan;
- Jatkaa suoritusta siitä, mihin jäi, kun generaattoria kutsutaan uudelleen.
123456789def 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
12345678910import 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}")
Erot iteratorin ja generaattorin välillä
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.
- Määrittele generaattorifunktio. Käytä yield-avainsanaa
dice_roller-funktiossa tuottaaksesi satunnaisia nopanheittoja väliltä1ja6. Käytärandom.randint()-funktiota jokaisen heiton simuloimiseen. - Kutsu
dice_roller()-funktiota luodaksesi generaattoriobjekti ja tallenna se muuttujaandice_generator. - Käytä
for-silmukkaa yhdessäenumerate()-funktion kanssa iteroidaksesi generaattorin yli. Lopeta iteraatio10heiton jälkeen käyttämälläif-ehtoa jabreak-lausetta.
Ratkaisu
Kiitos palautteestasi!
single