2015-11-11 3 views
4

Рассмотрим следующий пример:Почему переменная может быть доступна за пределами цикла в Python?

for iter in xrange(10): 
    myvar = iter 

print myvar 
# 9 

Здесь myvar явно вне цикла? Но он все еще доступен. Если это Perl, это вызовет ошибку.

В чем причина такой функции в Python? Это вредно? Что лучше, чтобы объявить переменную перед циклом?

+6

http://stackoverflow.com/questions/3611760/scoping-in-python-for-loops – galaxyan

+0

Существует глобальная область видимости и функции (локальная). Не существует области уровня блока. Это побочный эффект такой простой схемы. – RobertB

+1

tl; dr: python! = C –

ответ

5

Нет новой области, созданной циклом for (Ruby также ведет себя одинаково). Это может быть удивительно, если вы исходите из языка, который создает новые области для блоков.

Я не считаю, что это вредно, если вы знаете правила.

Если ваши функции и методы настолько велики, что у вас проблемы с отслеживанием, ваши функции и методы слишком велики.

-1

Думай об этом, как будто вы делаете это:

my_var = 0 
my_var = 1 
my_var = 2 
... 
my_var = 9 

print my_var 

Это в основном то, что итерация будет выглядеть, нет никаких причин, почему my_var не будет доступен из вашего текущего метода/объем.

Смежные вопросы