Sono un principiante Python e sono di C/C++. Sto usando Python 2.7.Python: le variabili sono ancora accessibili se definite in try o if?
Ho letto questo articolo: A Beginner’s Guide to Python’s Namespaces, Scope Resolution, and the LEGB Rule, e penso di avere una certa comprensione delle tecnologie di Python.
Oggi mi sono reso conto che posso scrivere codice Python come questo:
if condition_1:
var_x = some_value
else:
var_x = another_value
print var_x
Cioè, var_x è ancora accessibile anche se è non definiscono prima il caso. Poiché provengo dallo sfondo C/C++, questo è qualcosa di nuovo per me, poiché in C/C++, var_x
sono definiti nell'ambito incluso da if e else, quindi non è più possibile accedervi a meno che non si definisca var_x
prima di if
.
Ho provato a cercare le risposte su Google ma poiché sono ancora nuovo in Python, non so nemmeno da dove iniziare e quali parole chiave dovrei usare.
La mia ipotesi è che, in Python, if
non crei un nuovo ambito. Tutte le variabili che sono state appena definite in if
sono nello scope in cui si trova if
ed è per questo che la variabile è ancora accessibile dopo lo if
. Tuttavia, se var_x
, nell'esempio sopra, è definito solo in if
ma non in else
, verrà emesso un avviso per dire che lo print var_x
può fare riferimento a una variabile che non può essere definita.
Ho una certa fiducia nella mia comprensione. Tuttavia, qualcuno potrebbe aiutarmi a correggermi se sbaglio da qualche parte o darmi un link del documento che discute su questo?
Grazie.
Sei corretto. Le variabili definite nei blocchi 'if' /' elif'/'else' sono visibili nell'oscilloscopio contenente il blocco. – MattDMo
Questo vale anche per i cicli 'for' e' while', così come l'istruzione 'with'. Fondamentalmente tutto tranne funzioni e classi (puoi ancora accedere alle variabili attraverso il nome della classe: 'Cls.var'). –
si può scherzare guardando ciò che è e non è in ambito con 'locals()' e 'globals()' – NightShadeQueen