Introduktion till Generatorer: Generering av Värden för Effektiv Iteration
Generatorer förenklar lat utvärdering genom att erbjuda ett koncist och läsbart sätt att skapa iteratorer. Medan en iterator implementeras som en klass med metoderna __iter__() och __next__(), implementeras en generator som en funktion som använder nyckelordet yield för att producera värden ett i taget. Generatorer behåller automatiskt sitt tillstånd mellan anrop, vilket gör dem mer intuitiva och effektiva för många användningsområden.
En generator är en speciell typ av funktion som:
- Använder nyckelordet
yieldistället förreturn; - Pausar exekveringen och behåller sitt tillstånd när yield anropas;
- Återupptar exekveringen från där den pausades när generatorn anropas igen.
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}")
Skillnader mellan iterator och generator
Swipe to start coding
I den föregående uppgiften implementerade du en oändlig tärningskastare med hjälp av en anpassad iterator-klass. Nu ska du förenkla samma funktionalitet genom att använda en generatorfunktion. Generatorer erbjuder ett koncist och lättläst sätt att skapa värden på begäran med hjälp av nyckelordet yield.
- Definiera generatorfunktionen. Använd nyckelordet yield inuti funktionen
dice_rollerför att generera slumpmässiga tärningskast mellan1och6. Använd funktionenrandom.randint()för att simulera varje kast. - Anropa funktionen
dice_roller()för att skapa ett generatorobjekt och tilldela det till variabelndice_generator. - Använd en
for-loop medenumerate()för att iterera över generatorn. Avsluta iterationen efter10kast med hjälp av enif-sats och kommandotbreak.
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
Fantastiskt!
Completion betyg förbättrat till 3.13
Introduktion till Generatorer: Generering av Värden för Effektiv Iteration
Svep för att visa menyn
Generatorer förenklar lat utvärdering genom att erbjuda ett koncist och läsbart sätt att skapa iteratorer. Medan en iterator implementeras som en klass med metoderna __iter__() och __next__(), implementeras en generator som en funktion som använder nyckelordet yield för att producera värden ett i taget. Generatorer behåller automatiskt sitt tillstånd mellan anrop, vilket gör dem mer intuitiva och effektiva för många användningsområden.
En generator är en speciell typ av funktion som:
- Använder nyckelordet
yieldistället förreturn; - Pausar exekveringen och behåller sitt tillstånd när yield anropas;
- Återupptar exekveringen från där den pausades när generatorn anropas igen.
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}")
Skillnader mellan iterator och generator
Swipe to start coding
I den föregående uppgiften implementerade du en oändlig tärningskastare med hjälp av en anpassad iterator-klass. Nu ska du förenkla samma funktionalitet genom att använda en generatorfunktion. Generatorer erbjuder ett koncist och lättläst sätt att skapa värden på begäran med hjälp av nyckelordet yield.
- Definiera generatorfunktionen. Använd nyckelordet yield inuti funktionen
dice_rollerför att generera slumpmässiga tärningskast mellan1och6. Använd funktionenrandom.randint()för att simulera varje kast. - Anropa funktionen
dice_roller()för att skapa ett generatorobjekt och tilldela det till variabelndice_generator. - Använd en
for-loop medenumerate()för att iterera över generatorn. Avsluta iterationen efter10kast med hjälp av enif-sats och kommandotbreak.
Lösning
Tack för dina kommentarer!
single