2016-06-02 4 views
-1

Warum unten funktioniert nicht innerhalb der Funktion, sondern funktioniert außerhalb?Python-Locals-Update funktioniert nicht

def foo(): 
    common = {'abc' : 'xyz'} 
    print(locals()) 
    locals().update(common) 
    print(locals(),abc) 

foo() 

Fehler: Nameerror: global name 'abc' ist nicht definiert

Wenn ich es außerhalb Funktion ausführen, funktioniert es

common = {'abc' : 'xyz'} 
print(locals()) 
locals().update(common) 
print(locals(),abc) 
+1

Siehe den Hinweis in [docs] (https://docs.python.org/2/library/functions.html#locals) –

+1

@JayWong http://meta.stackexchange.com/q/66377/248731 (auch weil * blöde Fragen sind und sie alle über SO sind). – jonrsharpe

+0

@jonrsharpe Sie tragen nur zu dem Durcheinander und Lärm bei. Außerdem stellen neue Leute manchmal dumme Fragen, wie Sie es irgendwann in Ihrem Leben haben müssen, da ich mir sicher bin, dass Sie genauso sind wie der Rest von uns. – apesa

Antwort

-1

Nach dem locals documentation:

Note The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter.

Es funktioniert also nicht, weil es nicht funktionieren soll. Aber um Ihre Frage jetzt zu beantworten, es funktioniert im globalen Bereich, weil die Änderung der ist möglich, die globals documentation haben nicht die Notiz sagen "das [...] sollte nicht geändert werden".

Und, natürlich, wenn Sie im globalen Bereich sind, dann ist global Einheimischen:

>>> globals() is locals() 
True 

So Globals Sie ändern, was erlaubt ist.

Verwandte Themen