Die Python-Funktion locals() liefert das Dict des aktuellen lokalen Namespaces. Auf Modul-Ebene ist sie identisch mit globals(). Innerhalb von Funktionen liefert sie eine Momentaufnahme der lokalen Variablen — mit der wichtigen Einschränkung, dass Schreib-Zugriff im Allgemeinen keine Wirkung auf die echten lokalen Variablen hat.
Einleitung
locals() macht den lokalen Scope sichtbar. Anwendungsfälle:
- Debug-Ausgabe: schnell alle lokalen Variablen einer Funktion ausgeben.
- Template-Rendering:
template.format(**locals())setzt alle lokalen Werte ein. - Inspection: prüfen, was im aktuellen Frame definiert ist.
Wichtig zu verstehen: In CPython werden Funktionen-Locals in einem Array gespeichert (nicht in einem Dict). locals() baut bei Aufruf einen Snapshot dieses Arrays als Dict. Schreib-Operationen auf das zurückgegebene Dict werden NICHT in das Array zurück synchronisiert — die Variablen bleiben unverändert.
In Modul-Scope und Klassen-Body ist locals() allerdings das echte Dict — Schreib-Zugriff funktioniert dort.
Syntax
locals()Rückgabewert
Ein Dict mit den lokalen Namen und ihren aktuellen Werten.
Beispiele
In einer Funktion
locals() zeigt alle bisher definierten Parameter und lokalen Variablen:
def example(a, b):
x = a + b
y = a * b
print(locals())
example(3, 4){'a': 3, 'b': 4, 'x': 7, 'y': 12}Schreib-Zugriff in Funktion ist wirkungslos
In Funktionen liefert locals() einen Snapshot — Schreiben darauf hat keine Wirkung auf die echten Variablen:
def attempt():
x = 10
locals()["x"] = 999
print(x) # immer noch 10
attempt()10Auf Modul-Ebene = globals()
Außerhalb von Funktionen ist locals() identisch mit globals():
x = 1
print(locals() is globals())TruePraktische Beispiele
Template-Rendering mit Format
format_map(locals()) ist eine elegante Form, lokale Variablen in einen String einzusetzen — bei vielen Werten kompakter als f-Strings:
def report(name, age, city):
template = "Hallo, {name}! Du bist {age} und lebst in {city}."
return template.format_map(locals())
print(report("Michael", 34, "Berlin"))Hallo, Michael! Du bist 34 und lebst in Berlin.Debug-Ausgabe der Funktions-Variablen
Eine Mini-Debug-Helper-Funktion: pprint(locals()) an strategischer Stelle zeigt alle aktuellen Variablen:
from pprint import pprint
def calculate(items):
total = sum(items)
avg = total / len(items)
max_v = max(items)
min_v = min(items)
pprint(locals())
return avg
calculate([10, 20, 30]){'avg': 20.0,
'items': [10, 20, 30],
'max_v': 30,
'min_v': 10,
'total': 60}Praktische Hinweise
- In Funktionen ist Schreib-Zugriff wirkungslos — versucht nicht, Variablen über
locals()["x"] = ...zu setzen. - Performance:
locals()baut bei jedem Aufruf einen neuen Dict-Snapshot — nicht in heißen Schleifen aufrufen. format_map(locals())ist eine sehr saubere Template-Form — nutzt nur die Werte, die im Template referenziert werden.inspect.currentframe().f_localsist die Low-Level-Form — selbe Limitierung wielocals().- Verwandte Funktionen:
globals(),vars(),dir(),inspect-Modul.