Das Iterator-Protokoll (Das Iterator-Protokoll), Lektion, Seite 724751
https://www.purl.org/stefan_ram/pub/iterator_protokoll_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Das Iterator-Protokoll

»__next__«

main.py

class C():
pass

c = C()

try: print( next( c ))
except Exception as e: print( e )

class C():
def __next__( self ):
return "ok."
pass

c = C()

try: print( next( c ))
except Exception as e: print( e )

Protokoll
'C' object is not an iterator
ok.
main.py

i = 0

class C():
def __iter__( self ):
return self
def __next__( self ):
global i
i += 1
if i < 3: return i
else: raise StopIteration
pass

c = C()

for j in c:
print( j )

Protokoll
1
2

Protokolle

an iterator is expected to define

def __iter__(self): return self

Yes? It is indeed an iterator, since its iter method returns itself. It is also iterable, since it has an iter method.

Übungsfragen

?   Übungsfrage

?    Übungsfrage
Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py

class Main:
def __init__( self ):
self.x = None
def __str__( self ):
return str( self.x )

p = Main()
q = Main()
p.x = 8
q.x = 3
print( p )
print( q )
print( p )

?   Ziel- und Argument

Wie heißt das Ziel (Zielobjekt) des folgenden Aufrufs?

Wie heißt das Argument des folgenden Aufrufs?

(Hierbei soll angenommen werden, daß »gamma« und »delta« Namen von Variablen sind, die Objekte enthalten.)

Aufruf
gamma.m( delta )

?   Übungsfrage

?    Übungsfrage
Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py

class Main:
def __init__( self ):
self.x = None
def m( self, other ):
print( self.x - other.x )

p = Main()
q = Main()
p.x = 9
q.x = 5
p.m( q )
q.m( p )

?   Übungsfrage 1

?    Übungsfrage
Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py

class Main:
def __init__( self ):
self.x = None
def m( self ):
print( self.x )
self.x += 1

p = Main()
q = Main()
p.x = 7
q.x = 2
p.m()
q.m()
p.m()

?   Übungsfrage

?    Übungsfrage (mittelschwierig)
Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py

class Main:
def __init__( self ):
self.x = None
def a( self ):
return 14
def b( self ):
return self.x
def m( self, other ):
print( self.a() - other.b() )

p = Main()
q = Main()
p.x = 5
q.x = 9
p.m( q )
q.m( p )

Übungsaufgaben

/   Übungsaufgabe

Der Start des folgende Codestücks ergibt eine Fehlermeldung

Codestück

with c() as x:

pass

Deklarieren Sie eine Klasse c vor dem Codestück und passen Sie dann deren Deklaration so lang an, bis es keine Fehlermeldungen mehr gibt. (Diese Aufgabe sollte ohne das Lesen von Dokumentation oder anderer Informationsquellen nur durch Lesen der Fehlermeldungen gelöst werden können.)

/   Übungsaufgabe 0

Ergänzen Sie in dem untenstehenden Programm benötigte Deklarationen von Methoden und von Feldern, so daß man mit »hello()« den Text »Hallo!« ausgeben kann, wie in dem untenstehenden Programm zu sehen ist. Dabei können die beiden Ellipsen »« durch andere Texte ersetzt werden. Das Hauptprogramm darf nicht verändert werden.

main.py

class Main:

o = Main()
x = Main()
o.hello()
x.hello()

Ausgabe
Hallo!
Hallo!

/   Übungsaufgabe 1

Ergänzen Sie in dem untenstehenden Programm benötigte Deklarationen von Methoden und von Feldern, so daß man mit »hello« eine Person begrüßen kann, wie in dem untenstehenden Programm zu sehen ist.

main.py

class Main:

o = Main()
x = Main()
o.hello( "Mia" )
x.hello( "Ben" )

Ausgabe
Hallo Mia!
Hallo Ben!

/   Übungsaufgabe 2

Ergänzen Sie in dem untenstehenden Programm benötigte Deklarationen von Methoden und von Feldern, so daß man mit einer Zuweisung an das Feld ›name‹ einen Namen für ein Objekt festlegen kann, das dann von der Funktion ›hello‹ verwendet wird, um eine entsprechende Begrüßung auszugeben, wie in dem untenstehenden Programm zu sehen ist.

main.py

class Main:

o = Main()
x = Main()
o.name = "Pia"
x.name = "Leo"
o.hello()
x.hello()
o.name = "Zoe"
o.hello()

Ausgabe
Hallo Pia!
Hallo Leo!
Hallo Zoe!

/   Übungsaufgabe 3 ⃖

Ergänzen Sie in dem untenstehenden Programm an der Stelle der Ellipse »« benötigte Deklarationen von Methoden und von Feldern, so daß man mit »greet« eine Person begrüßen kann, wobei die Begrüßungsformel vorher mit »=« festgelegt wurde, wie in dem untenstehenden Programm zu sehen ist.

main.py

class Main:

o = Main()
x = Main()
o.greeting = "Hallo"
x.greeting = "Guten Tag,"
o.greet( "Max" )
o.greet( "Lea" )
x.greet( "Max" )
x.greet( "Lea" )
x.greeting = "Willkommen"
o.greet( "Max" )
o.greet( "Lea" )
x.greet( "Max" )
x.greet( "Lea" )

Ausgabe
Hallo Max
Hallo Lea
Guten Tag, Max
Guten Tag, Lea
Hallo Max
Hallo Lea
Willkommen Max
Willkommen Lea

/   Übungsaufgabe 4

Die Methode »count« soll das Attribut ›value‹ des Objekts um «1» erhöhen.

main.py

class Main:

counter0 = Main()
counter1 = Main()
counter1.count(); counter1.count(); counter1.count()
counter1.count(); counter1.count()
print( counter0.value )
print( counter1.value )

Ausgabe
0
5

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724751 stefan_ram:724751 Das Iterator-Protokoll Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724751, slrprddef724751, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/iterator_protokoll_python