Die Python-Funktion iter() erzeugt einen Iterator aus zwei verschiedenen Eingaben: entweder aus einem Iterable (list, tuple, str, dict, ...) — dann ruft sie intern __iter__() auf — oder aus einer callable Funktion mit Sentinel-Wert — dann liefert der Iterator solange Werte, bis die Funktion den Sentinel zurückgibt. Die zweite Form ist ein wenig bekanntes, aber elegantes Werkzeug für Streams und Polling-Schleifen.

Einleitung

In Python kennen wir Iterables und Iteratoren. Ein Iterable ist alles, was sich mit for x in obj durchlaufen lässt — Listen, Strings, Dicts, Generatoren. Ein Iterator ist das Objekt, das tatsächlich __next__() aufruft und Element für Element liefert.

iter(iterable) ist der formale Weg, aus einem Iterable einen Iterator zu machen — meist als Vorbereitung für next()-Aufrufe oder zur expliziten Steuerung der Iteration.

Die Zwei-Argument-Form iter(callable, sentinel) ist seltener bekannt: Sie erzeugt einen Iterator, der bei jedem next() die Callable aufruft und das Ergebnis liefert — bis dieses Ergebnis == sentinel ist. Das ist perfekt für Datei-Streams, Netzwerk-Reads, Polling und alle Szenarien, in denen ein Endsignal über einen Wert kommt.

Syntax

Python Syntax
iter(object)              # aus Iterable
iter(callable, sentinel)  # bis callable() == sentinel
Parameter
object

Ein Iterable mit __iter__()-Methode oder ein Sequenz-Objekt mit __getitem__().

callable

Eine 0-stellige Funktion oder Lambda. Wird bei jedem next()-Aufruf einmal aufgerufen.

sentinel

Wert, bei dessen Rückgabe die Iteration endet (StopIteration).

Rückgabewert

Ein Iterator-Objekt. Aufruf von next() liefert das nächste Element, am Ende StopIteration.

Beispiele

Iterator aus Liste

Python Beispiel
numbers = [1, 2, 3]
it = iter(numbers)
print(next(it))
print(next(it))
print(next(it))
try:
    print(next(it))
except StopIteration:
    print("fertig")
Output
1
2
3
fertig

Aus String

Python Beispiel
it = iter("abc")
print(list(it))
Output
['a', 'b', 'c']

Sentinel-Form

Python Beispiel
# Counter, der bei 5 stoppt
counter = iter(lambda i=[0]: (i.__setitem__(0, i[0] + 1) or i[0]), 5)
print(list(counter))
Output
[1, 2, 3, 4]

Praktische Beispiele

Datei in fester Block-Größe lesen

Python Beispiel
# Liest 1024 Bytes auf einmal — bis EOF (leerer Bytes-String)
with open("big.bin", "rb") as f:
    for block in iter(lambda: f.read(1024), b""):
        process(block)

Erstes passendes Element finden

Python Beispiel
users = [
    {"name": "Alice", "alter": 17},
    {"name": "Bob",   "alter": 24},
    {"name": "Cleo",  "alter": 31},
]
# next() mit Generator und Default
first_adult = next(
    (u for u in users if u["alter"] >= 18),
    None,
)
print(first_adult)
Output
{'name': 'Bob', 'alter': 24}

Manueller Iteratoren-Reset

Python Beispiel
# Iteratoren sind „verbraucht" nach Durchlauf — frischen Iterator holen:
data = [10, 20, 30]
for _ in range(2):
    for n in iter(data):
        print(n, end=" ")
    print()
Output
10 20 30 
10 20 30 

Praktische Hinweise

  • for-Schleifen rufen iter() automatisch auf — du brauchst es selten explizit.
  • Iteratoren sind einmal-konsumierbar: Nach dem Durchlauf ist er „leer" — iter() auf das Original holt einen neuen.
  • Sentinel-Form ist ideal für stream-artige APIs (socket.recv, f.read, queue.get_nowait).
  • Verwandte Funktionen: next() (nächstes Element), enumerate() (Index + Element), itertools (Iterator-Bibliothek).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht