0Pricing
Python Academy · Lektion

Closures und freie Variablen

Zustand in inneren Funktionen erfassen

Closures und freie Variablen ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Verschachtelte Funktionen

In Python können Sie eine Funktion innerhalb einer anderen Funktion definieren. Die innere Funktion wird jedes Mal neu erstellt, wenn die äußere Funktion ausgeführt wird.

def outer():
    def inner():
        return 'from inner'
    return inner()
print(outer())

Die innere Funktion sieht äußere Variablen

Eine innere Funktion kann Variablen lesen, die in der einschließenden Funktion definiert sind. Diese werden als freie Variablen bezeichnet, weil sie nicht lokal zur inneren Funktion sind.

def outer():
    message = 'hello'
    def inner():
        return message
    return inner()
print(outer())

Was ist eine Closure?

Eine Closure entsteht, wenn eine innere Funktion zurückgegeben wird und sich weiterhin an die freien Variablen aus ihrem einschließenden Gültigkeitsbereich erinnert, selbst nachdem dieser Gültigkeitsbereich beendet ist.

def make_greeter(name):
    def greet():
        return 'Hi ' + name
    return greet
g = make_greeter('Ada')
print(g())

Der erfasste Zustand bleibt erhalten

Die äußere Funktion wurde bereits beendet, dennoch hält die Closure weiterhin name fest. Der Wert bleibt innerhalb der zurückgegebenen Funktion erhalten.

def make_greeter(name):
    def greet():
        return 'Hi ' + name
    return greet
a = make_greeter('Ada')
b = make_greeter('Bob')
print(a())
print(b())

Eine Multiplikatorfabrik

Closures eignen sich hervorragend als Fabriken, die angepasste Funktionen erzeugen. Hier multipliziert jede zurückgegebene Funktion mit einem erfassten Faktor.

def multiplier(factor):
    def multiply(n):
        return n * factor
    return multiply
double = multiplier(2)
triple = multiplier(3)
print(double(10))
print(triple(10))

Jede Closure ist unabhängig

Jeder Aufruf der Fabrik erstellt eine eigene Closure mit ihrem eigenen erfassten Wert. Die Closures beeinflussen sich nicht gegenseitig.

def adder(amount):
    def add(n):
        return n + amount
    return add
add5 = adder(5)
add100 = adder(100)
print(add5(1), add100(1))

Erfasste Werte untersuchen

Die erfassten Namen sind in __code__.co_freevars aufgeführt, und ihre Werte befinden sich in den Zellen von __closure__.

def make(x):
    def f():
        return x
    return f
fn = make(42)
print(fn.__code__.co_freevars)
print(fn.__closure__[0].cell_contents)

Closures erfassen Variablen, keine Werte

Eine Closure erfasst die Variable selbst und sieht daher den endgültigen Wert der Variable. Das ist wichtig, wenn sich die Variable nach der Erstellung der Closure ändert.

def build():
    x = 1
    def show():
        return x
    x = 99
    return show
print(build()())

Die Falle der späten Bindung in Schleifen

Ein klassischer Stolperstein: In einer Schleife erstellte Closures verwenden alle dieselbe Schleifenvariable und erfassen daher deren letzten Wert.

funcs = []
for i in range(3):
    funcs.append(lambda: i)
print([f() for f in funcs])

Späte Bindung beheben

Binden Sie den aktuellen Wert mit einem Standardargument, damit jede Closure zum Zeitpunkt ihrer Definition ihre eigene Kopie erfasst.

funcs = []
for i in range(3):
    funcs.append(lambda i=i: i)
print([f() for f in funcs])

Closures als leichtgewichtige Objekte

Eine Closure bündelt Daten und Verhalten ähnlich wie ein kleines Objekt – für einfache Fälle ist das oft übersichtlicher als eine vollständige Klasse.

def counter_start(start):
    def value():
        return start
    return value
c = counter_start(10)
print(c())

Wissenscheck

Was ist eine Closure in Python?

Rückblick: Closures und freie Variablen

Die wichtigsten Konzepte:

  • Innere Funktionen können Variablen aus dem einschließenden Gültigkeitsbereich lesen (freie Variablen).
  • Eine Closure ist eine zurückgegebene innere Funktion, die sich diese Variablen merkt.
  • Jeder Aufruf einer Fabrik erstellt eine unabhängige Closure.
  • Closures erfassen Variablen, keine Werte. Das verursacht die Falle der späten Bindung in Schleifen – beheben Sie sie mit einem Standardargument.
def power_of(exp):
    return lambda base: base ** exp
square = power_of(2)
print(square(9))

Häufig gestellte Fragen

Ist die Lektion „Closures und freie Variablen“ kostenlos?

Ja — der vollständige Text von „Closures und freie Variablen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Closures und freie Variablen“?

Zustand in inneren Funktionen erfassen Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Closures und freie Variablen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Funktionen erster Klasse
  2. Closures und freie Variablen
  3. nonlocal und veränderlicher Zustand
  4. Partielle Funktionen
← Zurück zu Python Academy