Forståelse af Iteratorer i Python
Hvad er iteratorer?
Teknisk set er en iterator i Python et objekt, der implementerer iteratorprotokollen, som består af følgende metoder:
__iter__(): returnerer selve iteratorobjektet, hvilket gør det kompatibelt med løkker somfor;__next__(): returnerer det næste element i sekvensen. Når der ikke er flere elementer, udløser den enStopIteration-undtagelse for at signalere slutningen af gennemløbet.
En iterator muliggør gennemløb af elementer i en iterable (f.eks. liste eller streng) ét ad gangen, mens den holder styr på sin position.
iterator = iter(iterable)
Bemærk
En iterator er også en iterable, fordi den implementerer metoden
__iter__().Ikke alle iterables er iteratorer. For eksempel er en liste iterable, men ikke en iterator. Når du sender den til funktionen
iter(), får du en iterator, der muliggør gennemløb element for element.
Oprettelse af en brugerdefineret iterator
Denne iterator genererer et fast antal tilfældige terningekast og stopper, når alle kast er udført.
123456789101112131415161718192021222324252627import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
Udtømning af iterator
Når en iterator er udtømt, kan den ikke genbruges uden at blive genskabt. For eksempel:
12345678910numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
Iteratorer kan kun gennemløbes én gang. For at iterere igen skal der oprettes en ny iterator.
Swipe to start coding
Udfyld de manglende dele af koden for at implementere en brugerdefineret iterator-klasse til at simulere en uendelig terningekaster. Iteratoren skal lazily generere tilfældige kast med en seks-sidet terning og stoppe efter 10 kast.
- Metoden
__iter__()gør det muligt at bruge et objekt som en iterator. - Metoden
__next__()producerer det næste tilfældige terningekast (et tal mellem 1 og 6). - Opret en instans af klassen
InfiniteDie, som repræsenterer terningekasteren. - Brug en for-løkke med
enumerate()til at kaste terningen lazily. Stop efter 10 kast ved hjælp af en if-betingelse og break-sætningen.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 3.13
Forståelse af Iteratorer i Python
Stryg for at vise menuen
Hvad er iteratorer?
Teknisk set er en iterator i Python et objekt, der implementerer iteratorprotokollen, som består af følgende metoder:
__iter__(): returnerer selve iteratorobjektet, hvilket gør det kompatibelt med løkker somfor;__next__(): returnerer det næste element i sekvensen. Når der ikke er flere elementer, udløser den enStopIteration-undtagelse for at signalere slutningen af gennemløbet.
En iterator muliggør gennemløb af elementer i en iterable (f.eks. liste eller streng) ét ad gangen, mens den holder styr på sin position.
iterator = iter(iterable)
Bemærk
En iterator er også en iterable, fordi den implementerer metoden
__iter__().Ikke alle iterables er iteratorer. For eksempel er en liste iterable, men ikke en iterator. Når du sender den til funktionen
iter(), får du en iterator, der muliggør gennemløb element for element.
Oprettelse af en brugerdefineret iterator
Denne iterator genererer et fast antal tilfældige terningekast og stopper, når alle kast er udført.
123456789101112131415161718192021222324252627import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
Udtømning af iterator
Når en iterator er udtømt, kan den ikke genbruges uden at blive genskabt. For eksempel:
12345678910numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
Iteratorer kan kun gennemløbes én gang. For at iterere igen skal der oprettes en ny iterator.
Swipe to start coding
Udfyld de manglende dele af koden for at implementere en brugerdefineret iterator-klasse til at simulere en uendelig terningekaster. Iteratoren skal lazily generere tilfældige kast med en seks-sidet terning og stoppe efter 10 kast.
- Metoden
__iter__()gør det muligt at bruge et objekt som en iterator. - Metoden
__next__()producerer det næste tilfældige terningekast (et tal mellem 1 og 6). - Opret en instans af klassen
InfiniteDie, som repræsenterer terningekasteren. - Brug en for-løkke med
enumerate()til at kaste terningen lazily. Stop efter 10 kast ved hjælp af en if-betingelse og break-sætningen.
Løsning
Tak for dine kommentarer!
single