Die Namensverdeckung (engl. Shadowing) tritt auf, wenn eine lokale Variable den gleichen Variablennamen wie eine weiter oben definierte Variable (z. B. eine globale Variable oder eine äußere Variable in einer geschachtelten Funktion) hat. Dadurch wird der ursprüngliche Variablenname innerhalb des lokalen Geltungsbereichs (Scope) verdeckt und ist nicht mehr direkt zugänglich.
Ein Beispiel von Shadowing:
# Python-Code
# Globale Variable
name = "Richard von Weizsäcker"
# Eine Funktion
def greet():
# Lokale Variable in der Funktion überschattet die globale Variable
name = "Helmut Schmidt"
print(f"Hallo, {name}!") # Gibt "Hallo, Helmut Schmidt!" aus
# Funktionsaufruf
greet()
# Die globale Variable bleibt unverändert
print(f"Globale Variable: {name}") # Gibt "Globale Variable: Richard von Weizsäcker" aus
Erklärung des Shadowing-Problems:
Globale Variable:name = "Alice" wird im Hauptprogramm definiert.
Lokale Variable: Innerhalb der Funktion greet() wird eine neue Variable name = "Bob" definiert.
Diese überdeckt (shaded) die globale name-Variable nur innerhalb der Funktion.
Ausgabe in der Funktion:
print(f"Hallo, {name}!") gibt "Hallo, Bob!" aus, da die Funktion die lokale Variable verwendet.
Globale Variable bleibt erhalten:
print(f"Globale Variable: {name}") gibt "Globale Variable: Alice" aus, weil die globale Variable nicht überschrieben wurde.
💡 Problem: Shadowing kann zu Verwirrung führen, da es so aussieht, als würde name überall dasselbe bedeuten, obwohl es innerhalb der Funktion eine völlig andere Variable ist.
Fazit
Namensverdeckung tritt auf, wenn eine lokale Variable einen bereits existierenden Namen überschreibt. Vermeidung: ✅ Verwende unterschiedliche Namen für verschiedene Scopes. ✅ Strukturiere deinen Code so, dass Variablen in einem klaren Kontext bleiben.