Ich bin ein Python Anfänger und ich bin von C/C++ Hintergrund. Ich benutze Python 2.7.Python: Variablen sind immer noch zugänglich, wenn sie in try oder if definiert sind?
Ich habe diesen Artikel gelesen: A Beginner’s Guide to Python’s Namespaces, Scope Resolution, and the LEGB Rule, und ich denke, ich habe ein wenig Verständnis für Python diese Technologien.
Heute wurde mir klar, dass ich so Python-Code schreiben:
if condition_1:
var_x = some_value
else:
var_x = another_value
print var_x
Das heißt, var_x noch zugänglich ist es sogar ist nicht definieren vor wenn der. Da ich aus C/C++ - Hintergrund bin, ist dies etwas Neues für mich, da in C/C++ var_x
in dem von if und sonst eingeschlossenen Bereich definiert sind, daher können Sie nicht mehr darauf zugreifen, wenn Sie var_x
vor if
definieren.
Ich habe versucht, die Antworten auf Google zu suchen, aber weil ich noch neu bei Python bin, weiß ich nicht einmal, wo ich anfangen soll und welche Schlüsselwörter ich verwenden soll.
Meine Vermutung ist, dass in Python if
keinen neuen Bereich erstellt. Alle Variablen, die in if
neu definiert sind, befinden sich nur in dem Bereich, in dem sich if
befindet und deshalb ist die Variable auch nach der if
erreichbar. Wenn jedoch im obigen Beispiel var_x
nur in if
, aber nicht in else
definiert ist, wird eine Warnung ausgegeben, dass der print var_x
auf eine Variable verweist, die möglicherweise nicht definiert ist.
Ich habe ein gewisses Vertrauen in mein eigenes Verständnis. Aber, könnte jemand mir helfen, mich zu korrigieren, wenn ich irgendwo falsch liege, oder mir einen Link des Dokuments geben, das darüber diskutiert?
Danke.
Sie haben Recht. Variablen, die in 'if' /' elif'/'else'-Blöcken definiert sind, sind in dem Bereich sichtbar, der den Block enthält. – MattDMo
Dies gilt auch für 'for' und' while' Loops, sowie die 'with' Anweisung. Im Grunde alles außer Funktionen und Klassen (Sie können weiterhin auf Variablen über den Klassennamen zugreifen: 'Cls.var'). –
können Sie sich umsehen, was ist und nicht im Bereich mit 'Locals()' und 'globals()' – NightShadeQueen