В result будет 8. Внешний цикл на последней итерации устанавливает i=9, затем внутренний range(9) последовательно присваивает тому же имени значения от 0 до 8.
Что произойдёт в результате выполнения следующего кода?
В result будет 8. Внешний цикл на последней итерации устанавливает i=9, затем внутренний range(9) последовательно присваивает тому же имени значения от 0 до 8.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что произойдёт в результате выполнения следующего кода?
for i in range(10): for i in range(i): pass result = i
- Возникнет ошибка
- В переменной result будет храниться 9
- В переменной result будет храниться None
- В переменной result будет храниться 10
- В переменной result будет храниться 8
Ответ
В result будет 8. Внешний цикл на последней итерации устанавливает i=9, затем внутренний range(9) последовательно присваивает тому же имени значения от 0 до 8.
В Python for не создаёт отдельную область видимости для переменной цикла. Внутреннее присваивание меняет i, но не состояние внешнего итератора, поэтому внешний цикл всё равно выполняет все значения range(10). После его последнего шага остаётся значение последнего внутреннего присваивания — 8. Ошибки нет. Для читаемого кода у вложенных циклов следует использовать разные имена переменных.