Problem:
Wie implementiert Python statische Variablen innerhalb von Funktionen, ähnlich wie C/C ' s statische Mitgliedsvariablen, die in der Funktion definiert sind Ebene?
Antwort:
In Python gibt es kein direktes Äquivalent für statische Variablen innerhalb von Funktionen. Eine ähnliche Funktionalität kann jedoch durch eine Kombination aus verschachtelten Funktionen und Abschlüssen erreicht werden:
def foo(): def counter(): if not hasattr(foo, "counter_value"): foo.counter_value = 0 foo.counter_value += 1 return foo.counter_value return counter
Hier definiert die Funktion foo() eine verschachtelte Funktion counter(). Die äußere Funktion foo() dient als Abschluss für counter() und stellt ihm einen isolierten Namensraum zur Verfügung.
Um auf den Zähler zuzugreifen und ihn zu erhöhen, würden Sie Folgendes aufrufen:
counter = foo() counter() # Initializes the counter counter() # Increments the counter
Decorator-Ansatz:
Ein anderer Ansatz besteht darin, einen Decorator zu verwenden, um eine Statik zu erstellen Variable:
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate @static_vars(counter=0) def foo(): foo.counter += 1 return foo.counter
Mit dieser Syntax können Sie die statische Variable bequemer initialisieren und darauf zugreifen, erfordert jedoch die Verwendung von foo. Präfix.
Das obige ist der detaillierte Inhalt vonWie kann ich statische Funktionsvariablen in Python simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!