2014-02-17 7 views
5
Arbeits
class Foo(object): 

    def __init__(self, x): 
     self.bar(x=x) 

    def bar(self, **kwargs): 
     print kwargs 
     locals().update(kwargs) 
     print x 


f = Foo(12) 

dies scheint offensichtlich, aber es funktioniert nicht, der erste Druck würde Ausgabe {'x': 12}, was richtig ist, aber dann bekomme ich diesen Fehler: NameError: global name 'x' is not definedEinheimischen() Update (kwargs) nicht

Warum würde das passieren? Vielen Dank.

+11

Haben Sie die [Docs on 'localhips()'] (http://docs.python.org/2/library/functions.html#locals) überprüft: Hinweis Der Inhalt dieses Wörterbuchs sollte nicht geändert werden; Änderungen dürfen die Werte der vom Interpreter verwendeten lokalen und freien Variablen nicht beeinflussen. –

+5

Python hat ** nicht ** eine * zuverlässige * Möglichkeit zur Erstellung von Locals zur Laufzeit. Selbst 'exec' funktioniert nicht in vielen Python-Versionen (z. B. python3 +, wobei' eval' eine Funktion ist). – Bakuriu

+0

@AshwiniChaudhary danke! #TIL – wong2

Antwort

1

Das von locals() zurückgegebene Wörterbuch ist schreibgeschützt. Sie können dem aktuellen Bereich keine Variablen dynamisch hinzufügen.