Jestem początkującym Python i jestem z C/C++ tła. Używam Pythona 2.7.Python: Zmienne są nadal dostępne, jeśli zostały zdefiniowane w próbie lub jeśli?
Przeczytałem ten artykuł: A Beginner’s Guide to Python’s Namespaces, Scope Resolution, and the LEGB Rule, i myślę, że mam pewne zrozumienie tych technologii Pythona.
Dziś zdałem sobie sprawę, że mogę napisać kod Pythona takiego:
if condition_1:
var_x = some_value
else:
var_x = another_value
print var_x
Oznacza to, var_x jest nadal dostępny nawet jest nie określić przed if. Ponieważ pochodzę z języka C/C++, jest to dla mnie czymś nowym, ponieważ w C/C++, var_x
są zdefiniowane w zakresie dołączonym przez if i else, dlatego nie można uzyskać do niego dostępu, chyba że zdefiniujesz var_x
przed if
.
Próbowałem wyszukiwać odpowiedzi w Google, ale ponieważ wciąż nie znam się na Pythonie, nie wiem nawet, od czego zacząć i jakich słów kluczowych powinienem użyć.
Domyślam się, że w Pythonie if
nie tworzy nowego zakresu. Wszystkie zmienne, które są nowo zdefiniowane w if
, znajdują się w zakresie, w którym znajduje się if
i dlatego zmienna jest nadal dostępna po if
. Jeśli jednak w powyższym przykładzie var_x
jest zdefiniowane tylko w if
, ale nie w else
, zostanie wyświetlone ostrzeżenie, że print var_x
może odwoływać się do zmiennej, która nie może być zdefiniowana.
Mam zaufanie do mojego własnego zrozumienia. Jednak, może ktoś mi pomóc poprawić, jeśli gdzieś się mylę, lub dać mi link do dokumentu, który omawia o tym?
Dzięki.
Masz rację. Zmienne zdefiniowane w blokach 'if' /' elif'/'else' są widoczne w zakresie zawierającym blok. – MattDMo
Dotyczy to również pętli 'for' i' while', a także instrukcji 'with'. Zasadniczo wszystko oprócz funkcji i klas (nadal można uzyskać dostęp do zmiennych za pośrednictwem nazwy klasy: 'Cls.var'). –
możesz przestać patrzeć na to, co jest i nie jest w zasięgu z 'locals()' i 'globals()' – NightShadeQueen