return – gibt einen Wert zurück, Funktion endet. DONE. Aber warte mal... was, wenn die Funktion pausieren könnte? 🤔 Was, wenn sie einen Wert zurückgibt, aber NICHT stirbt? Was, wenn sie beim nächsten Aufruf GENAU DA weitermacht, wo sie war? Das sind Generators mit yield! 🚀# NORMALE FUNKTION:
def get_numbers():
return [1, 2, 3, 4, 5] # Alle auf einmal!
nums = get_numbers() # Liste im Speicher ❌
# Was, wenn 1 Million Zahlen? 💥 RAM explodiert!
# GENERATOR:
def get_numbers():
yield 1
yield 2
yield 3
yield 4
yield 5
nums = get_numbers() # Generator-Objekt ✅
next(nums) # 1 (pausiert DANACH)
next(nums) # 2 (pausiert DANACH)
next(nums) # 3 (pausiert DANACH)yield = "Hier, nimm das! Ich warte solange..." 🛑 Der Generator FRIERT EIN, bewahrt seinen State (Variablen, Position), und wartet auf den nächsten next()-Aufruf. Dann taut er auf und macht weiter! ❄️→🔥def fibonacci():
a, b = 0, 1
while True: # UNENDLICH!
yield a
a, b = b, a + b
fib = fibonacci()
next(fib) # 0
next(fib) # 1
next(fib) # 1
next(fib) # 2
next(fib) # 3
# ... für immer!LIST (return) – Alles auf einmal:
┌───────────────────────────────────┐
│ FUNKTION START │
│ ↓ │
│ Berechne: [1, 2, 3, 4, 5] │
│ ↓ │
│ return [Liste] │
│ ↓ │
│ FUNKTION TOT ☠️ │
└───────────────────────────────────┘
RAM: [1,2,3,4,5] gespeichert ❌
GENERATOR (yield) – Lazy Loading:
┌───────────────────────────────────┐
│ GENERATOR START │
│ ↓ │
│ yield 1 ← Pausiert hier! 🛑 │
└──────────┬────────────────────────┘
next() aufgerufen...
┌──────────┴────────────────────────┐
│ Generator WACHT AUF! ⏰ │
│ ↓ │
│ yield 2 ← Pausiert hier! 🛑 │
└──────────┬────────────────────────┘
next() aufgerufen...
┌──────────┴────────────────────────┐
│ yield 3 ← Pausiert hier! 🛑 │
└───────────────────────────────────┘
RAM: Nur AKTUELLER Wert (z.B. "3") ✅
Generator = Streaming 📡
List = Download 📥yield, um Monster on-demand zu erzeugen. Keine riesigen Listen im Speicher – pure Effizienz! 💪yield from – Delegiere an anderen Generator(x for x in range(10)).send() Method – sende Werte ZURÜCK in Generator! 🔄Verfügbare Konzepte & Befehle:
move(), turn()print("Feuer")def gen(): yield xfor x in generator():while True: yieldreturn: Gibt einen Wert zurück und beendet die Funktionyield: Gibt einen Wert zurück und pausiert die Funktion
Unterstütze mein neues Projekt "Leyla's Code" mit einer Bitcoin-Spende!
💰
Bitcoin-Adresse:
Jede Spende hilft, Leyla's Code weiterzuentwickeln – danke, Captain! 🏴☠️
Willkommen im Generator-Level, Kapitän! Hier lernst du eine der mächtigsten Funktionen von Python kennen: Generatoren mit yield. Diese speziellen Funktionen ermöglichen Lazy Evaluation – das bedeutet, Werte werden nur dann erzeugt, wenn sie tatsächlich gebraucht werden. Das spart Speicher und macht deinen Code effizienter!
Ein Generator ist eine spezielle Funktion, die yield statt return verwendet. Während return die Funktion beendet und einen Wert zurückgibt, pausiert yield die Funktion und gibt einen Wert zurück – beim nächsten Aufruf geht's an derselben Stelle weiter!
Beispiel:
def count_up():
n = 1
while n <= 3:
yield n
n += 1
Jeder Aufruf von next() liefert den nächsten Wert: 1, 2, 3
Generatoren sind perfekt für:
🌟 Profi-Tipp: In modernen Web-Frameworks wie FastAPI werden Generatoren für Streaming Responses verwendet – perfekt für große Dateien oder Real-Time-Updates! Auch in Data Science sind Generatoren unverzichtbar für Batch-Processing riesiger Datasets.
return: Beendet die Funktion sofort und gibt einen Wert zurück. Beim nächsten Aufruf startet die Funktion von vorne.
yield: Pausiert die Funktion, gibt einen Wert zurück und merkt sich die Position. Beim nächsten Aufruf geht's genau da weiter!
Real-World Anwendung:
Stell dir vor, du willst 1 Million Zahlen verarbeiten. Mit einer normalen Liste brauchst du viel Speicher für alle Zahlen. Mit einem Generator erzeugst du nur die aktuell benötigte Zahl – 99% Speicherersparnis!
Python bietet auch Generator Expressions – kompakte One-Liner für einfache Generatoren:
gen = (x**2 for x in range(1000000))
Diese Syntax ist wie List Comprehensions, aber mit runden Klammern. Super effizient!
In diesem Level spawnen Monster-Wellen dynamisch mit Generator-Patterns. Das simuliert echte Game-Development-Szenarien, wo Gegner on-demand generiert werden. Nutze yield für elegante, memory-effiziente Lösungen!
Du bist jetzt ein Generator-Meister, Kapitän! Setze die Segel und erobere das Lazy-Evaluation-Imperium! 🐀 🏴☠️