Python: die statische variable Dekorateur

Ich würde gern ein Dekorateur wie unten, aber ich kann nicht scheinen zu denken, dass der eine Implementierung, die funktioniert. Ich fange an zu denken, es ist nicht möglich, aber dachte, ich würde Sie bitten, Jungs, die erste.

Ich fest: es gibt verschiedene andere Möglichkeiten zum erstellen von statischen Variablen in Python, aber ich finde diese Weise hässlich. Ich möchte wirklich verwenden Sie die folgende syntax, wenn möglich.

@static(x=0)
def f():
    x += 1
    print x

f() #prints 1
f() #prints 2

I don ' T care wenn die Umsetzung von static oder lang ist hackity, solange es funktioniert wie oben.

Habe ich diese version, aber es erlaubt nur eine <function>.<varname> syntax, die bekommt schwerfällig ziemlich schnell mit mehr Funktions-und Variablennamen.

def static(**assignments):
    def decorate(func):
        for var, val in assignments.items():
            setattr(func, var, val)
        return func
    return decorate

Verschiedenen Dinge, die ich dachte, konnte Sie aber nicht bekommen, um zu arbeiten waren:

  1. Ändern von f (der dekorierten Funktion) in einer callable Klasse, und irgendwie Speicherung der statischen vars in self transparent.
  2. Änderung der globals von f() in der decorator und irgendwie einfügen "global x" - Anweisungen in den code für f.
  3. Ändern f in einen generator, wo wir binden die Variablen von hand und dann führen Sie das f-code direkt.
InformationsquelleAutor bukzor | 2009-10-23
Schreibe einen Kommentar