В отличие от предыдущей задачи, в этой есть одно важное изменение, которое меняет правильный ответ.
По шагам:
1️⃣Интерпретатор анализирует тело функции func и замечает операцию x += 1 (которая включает в себя присваивание).
2️⃣Переменная x сразу помечается как локальная для всей функции, полностью перекрывая доступ к глобальной переменной x = 1.
3️⃣При вызове функции первая строка print(x) пытается прочитать локальную x.
4️⃣Так как до выполнения x += 1 локальная переменная еще не инициализирована значениями, возникает исключение UnboundLocalError.
Почему это важно
Это неочевидное проявление лексической области видимости. Если нужно только прочитать глобальную переменную внутри локальной области, проблем не возникнет. Но для её изменения потребуется явно указать global x в начале функции.
Post #4717
988
- ✍ 4