Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Работа с аргументами командной строки
- Работа с zip()
- Обработка ошибок в JSON данных
- Функции any() и all() в Python
- kwargs в Python
- Объединение словарей в Python
- Передача параметров в Python
- Протокол управления контекстом
- Список импортированных модулей в Python
- Преобразование данных в Python
- Сравнение строк в Python
- Управление контекстом выполнения кода
- *args и **kwargs в Python
- Работа с модулем glob в Python
- Группы исключений в Python
- Работа со строками
- Цикл for в Python
- Сравнение def и lambda функций в Python
- Antigravity модуль
- Преобразование документов в PDF с помощью Spire.Office
- Работа с файлами в Python
- Типы возвращаемых значений в Python
- Транспонирование матрицы
- Работа с комплексными числами
- Метод rpow в Python
- Подписка на каналы разработчиков
- Получение локальных переменных в Python
- Удаление ссылок в Python
- Lambda-функция в Python: использование с map() и sum()
- Пропуск начальных строк с помощью dropwhile()
- Освобождение памяти в Python
- Округление дробей в Python
- Виртуальные среды в Python
- Работа с контекстным менеджером Pool
- Упрощение работы с JSON-данными в Python
- Параллельные вычисления в Python
- Встраивание HTML в Jupyter Notebook
- Профилирование данных с Pandas
- Поиск файлов по шаблону
- Проверка запуска скрипта или импорта модуля
- None в Python: использование и особенности
- Избегание изменяемых аргументов
- Работа с датой и временем в Python
- Контроль точности вывода чисел
- Присоединение элементов коллекции















