Причина, лежащая в основе правил доступа к областям Python, является следствием выбора Python не иметь явных деклараций локальных переменных. Без таких заявлений, C++ - правила области стиля, где каждый вложенности создает новый контекст будет сделать следующую неудачу:
def test():
if some_condition:
a = 3
else:
a = 5
# If the above nesting created a new scope, "a" would
# now be out of scope.
print a
Это работает в C++, так как явные декларации предоставить вам выбор между написанием:
// doesn't work
if (some_condition) {
int a = 3;
}
else {
int a = 5;
}
// "a" is out of scope
std::cout << a ;
и:
// works
int a;
if (some_condition) {
a = 3;
}
else {
a = 5;
}
printf("%d\n", a);
Python, не имея явных деклараций для локальных переменных, необходимо расширить сферу в целом определения функции (и определение класса я n случай класса).
Потому что нет необходимости в декларации. Это WHERE вы назначаете имя, которое подсчитывается, по размеру, тогда как контент определяет его тип (который может поэтому меняться со временем ...) – Pynchia
Значит, он просто ищет, где в иерархии он найдет значение? Значит, переменные не уничтожаются после выхода из области? – user1767754
http://stackoverflow.com/q/291978/238978 –