2013-01-03 10 views
5

Im Moment habe ich Code wie folgt:Eine Alternative zu globalen in Python

cache = 1 
def foo(): 
    global cache 
    # many 
    # lines 
    # of code 
    cache = 2 

Dies ist jedoch zu schwer zu finden-Fehler führen können, in die Zukunft, denn der Leser nicht feststellen, dass global cache irgendwo erscheint über cache = 2. Alternativ dazu kann ein Beitragender versehentlich def bar(): cache = 2 hinzufügen und vergessen, die global cache hinzuzufügen.

Wie kann ich diese Falle vermeiden?

+1

Was genau ist die Falle? Was versuchst du zu erreichen und was funktioniert nicht? – BrenBarn

+0

Was ist, wenn jemand die zweite Methode schreibt? Es wird immer noch eine lokale Variable sein. Es gibt kein Problem mit Ihrem Code. – ATOzTOA

+2

Wenn es keine 'globale' Deklaration gibt, dann ist die Variable lokal - wenn 'der Leser' irgendeinen Hintergrund in Python hat, dann wissen sie, dass es lokal ist. Wenn Sie wirklich wollen, fügen Sie einfach einen Kommentar hinzu, der sagt, dass es lokal oder so ist. – Volatility

Antwort

12
class Cache: 
    myvar = 1 

def foo(): 
    Cache.myvar = 2 

Auf diese Weise ist Cache.myvar praktisch ein "global". Es ist möglich, von überall zu lesen/schreiben.

Ich bevorzuge dies gegenüber der Wörterbuchalternative, weil es eine automatische Vervollständigung der Variablennamen ermöglicht.

+1

Große Antwort, elegant und genau das, was ich gesucht habe! Vielen Dank –

8
cache = 1 
def foo(): 
    return 2 
cache = foo() 

oder

d = {'cache': 1} 
def foo(x): 
    x['cache'] = 2 
foo(d) 
3

„der Leser unbeabsichtigt vielleicht denkt, dass die globale Variable wurde aktualisiert“ ist ein pitfall nicht viel. Sie müssen damit rechnen, dass Leute, die Ihren Code lesen, wissen, wie Python funktioniert. Wenn Sie es deutlicher machen möchten, verwenden Sie einen Kommentar. Dafür sind sie da.

2

Die Verwendung globaler Variablen ist keine gute Programmierpraxis. Übergeben Sie die Variable als Argument: make function gibt etwas zurück und verwendet es in einer anderen Funktion. Funktion kann der Variablen zugewiesen werden, so wie Python funktioniert.