@gpm7315

Что происходит в момент объявления функции?

a = 1
def test():
....print a
....a = 2

Помогите, пжл, разобраться почему во время исполнения первой инструкции функции - "print a", уже известно, что далее определена локальная переменная и соответственно "print a" приведет к ошибке. Логично, что во время объявления функции интерпретатор не просто пропускает тело функции... Что же происходит? :)
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@gpm7315 Автор вопроса
Грубо говоря в python сделано так, что одна и та же переменная внутри функции не может быть сначала глобальной, потом локальной. В момент компиляции интерпретатор "предполагает" какая переменная будет представлена как глобальная, а какая локальная. В момент выполнения функции интерпретатор уже знает какую переменную искать в каком пространстве имен. Переменная либо локальная, либо глобальная. В моём примере, когда происходит выполнение функции, встретив переменную a (print a), интерпретатор считает её уже локальной, хотя и не объявленной, поэтому и говорит: "эй дядя ты не хочешь сначала задать значение для переменной". Но если в функции только читается глобальная переменная, то и проблем не возникает. Предположительно, это сделано для оптимизации работы с пространствами имен. Иначе, приходилось бы делать лишние операции по поиску необходимой переменной в разных пространствах. Всем спасибо! :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы