Python -zelfstudie

Python HOME Python-intro Python Aan de slag Python-syntaxis Python-opmerkingen Python-variabelen Python-gegevenstypen Python-nummers Python-casting Python-snaren Python Booleans Python-operators Python-lijsten Python-tupels Python-sets Python-woordenboeken Python Als...Anders Python While-lussen Python voor lussen Python-functies Python Lambda Python-arrays Python-klassen/objecten Python-overerving Python-iterators Python-bereik Python-modules Python-datums Python-wiskunde Python JSON Python RegEx Python PIP Python proberen...Behalve Python-gebruikersinvoer Opmaak van Python-tekenreeksen

Bestandsbehandeling

Python-bestandsafhandeling Python-bestanden lezen Python bestanden schrijven/maken Python bestanden verwijderen

Python-modules

NumPy-zelfstudie Panda walkthrough Scipy-zelfstudie

Python Matplotlib

Matplotlib Intro Matplotlib Aan de slag Matplotlib Pyplot Matplotlib plotten Matplotlib-markeringen Matplotlib-lijn Matplotlib-labels Matplotlib-raster Matplotlib-subplots Matplotlib Scatter Matplotlib-repen Matplotlib-histogrammen Matplotlib-cirkeldiagrammen

Machinaal leren

Beginnen Gemiddelde mediane modus Standaardafwijking percentiel Gegevensdistributie Normale gegevensverdeling Scatterplot Lineaire regressie Polynomiale regressie Meervoudige regressie Schaal Trein/Test Beslissingsboom

Python MySQL

MySQL Aan de slag MySQL Database maken MySQL-tabel maken MySQL-invoeging MySQL Select MySQL Waar MySQL Bestel op MySQL verwijderen MySQL-droptabel MySQL-update MySQL-limiet MySQL Join

Python MongoDB

MongoDB Aan de slag MongoDB Database maken MongoDB Verzameling maken MongoDB invoegen MongoDB Zoeken MongoDB-query MongoDB Sorteren MongoDB verwijderen MongoDB Drop-collectie MongoDB-update MongoDB-limiet

Python-referentie

Python-overzicht Ingebouwde functies van Python Python-stringmethoden Methoden voor Python-lijst Python-woordenboekmethoden Python Tuple-methoden Methoden voor Python-sets Python-bestandsmethoden Python-trefwoorden Python-uitzonderingen Python-woordenlijst

Modulereferentie

Willekeurige module Verzoekmodule Statistiekmodule Wiskundige module cMath-module

Python-instructies

Lijstduplicaten verwijderen Een string omkeren Voeg twee nummers toe

Python-voorbeelden

Python-voorbeelden Python-compiler Python-oefeningen Python-quiz Python-certificaat

Python -iterators


Python-iterators

Een iterator is een object dat een telbaar aantal waarden bevat.

Een iterator is een object waarop kan worden herhaald, wat betekent dat u door alle waarden kunt lopen.

Technisch gezien is een iterator in Python een object dat het iteratorprotocol implementeert, dat bestaat uit de methoden __iter__() en __next__().


Iterator versus itereerbaar

Lijsten, tupels, woordenboeken en sets zijn allemaal itereerbare objecten. Het zijn itereerbare containers waar je een iterator uit kunt halen.

Al deze objecten hebben een iter()methode die wordt gebruikt om een ​​iterator te krijgen:

Voorbeeld

Retourneer een iterator van een tuple en druk elke waarde af:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

Even strings zijn itereerbare objecten en kunnen een iterator retourneren:

Voorbeeld

Strings zijn ook itereerbare objecten, die een reeks tekens bevatten:

mystr = "banana"
myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Een iterator doorlopen

We kunnen ook een forlus gebruiken om door een itereerbaar object te itereren:

Voorbeeld

Herhaal de waarden van een tuple:

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
  print(x)

Voorbeeld

Herhaal de karakters van een string:

mystr = "banana"

for x in mystr:
  print(x)

De forlus maakt in feite een iterator-object en voert voor elke lus de methode next() uit.



Maak een iterator

Om een ​​object/klasse als iterator te maken, moet je de methoden __iter__()en __next__()op je object implementeren.

Zoals je hebt geleerd in het hoofdstuk Python-klassen/objecten , hebben alle klassen een functie genaamd __init__(), waarmee je wat kunt initialiseren wanneer het object wordt gemaakt.

De __iter__()methode werkt vergelijkbaar, u kunt bewerkingen uitvoeren (initialiseren enz.), maar moet altijd het iterator-object zelf retourneren.

Met de __next__()methode kunt u ook bewerkingen uitvoeren en moet u het volgende item in de reeks retourneren.

Voorbeeld

Maak een iterator die getallen retourneert, beginnend met 1, en elke reeks wordt met één verhoogd (retourneert 1,2,3,4,5 enz.):

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    x = self.a
    self.a += 1
    return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

StopIteratie

Het bovenstaande voorbeeld zou voor altijd doorgaan als je genoeg next()-instructies had, of als het in een forlus werd gebruikt.

Om te voorkomen dat de iteratie voor altijd doorgaat, kunnen we de StopIterationinstructie gebruiken.

In de __next__()methode kunnen we een beëindigingsvoorwaarde toevoegen om een ​​fout te veroorzaken als de iteratie een bepaald aantal keren wordt uitgevoerd:

Voorbeeld

Stop na 20 iteraties:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration

myclass = MyNumbers()
myiter = iter(myclass)

for x in myiter:
  print(x)