Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich statische Funktionsvariablen in Python simulieren?

Wie kann ich statische Funktionsvariablen in Python simulieren?

Susan Sarandon
Freigeben: 2024-12-04 17:56:11
Original
187 Leute haben es durchsucht

How Can I Simulate Static Function Variables in Python?

Python-Äquivalent statischer Funktionsvariablen

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage