Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Создание циклической ссылки
- Переменная с нижним подчеркиванием
- Проверка версии Python
- Просмотр атрибутов и методов класса
- Проекты на Python
- Создание объекта времени
- Установка и использование модуля Wikipedia
- Копирование объектов в Python
- Работа с аргументами командной строки
- CLI-инструмент howdoi
- Блок try…finally в Python
- Проверка переменных окружения в Python
- Создание графиков в терминале
- Работа с базами данных SQLite
- Транспонирование матрицы в Python
- Методы работы со строками в Python
- Перевод эмодзи и эмотиконов.
- Работа с массивами в Python
- Печать комбинаций в Python с Itertools
- Различия символов в Python
- Методы работы со списками
- Фильтрация данных в Python.
- Модуль math: основные функции
- Python itertools combinations() — группировка элементов
- Оператор space-invader
- Преобразование текста в нижний регистр
- Функциональное программирование.
- Counter() — подсчет элементов
- Создание словарей в Python
- Генератор чисел Фибоначчи
- Блок else в циклах Python
- Сортировка с помощью key
- Удаление знаков препинания в Python
- Фильтрация списков с itertools
- Метод difference_update() — разность множеств
- Работа с библиотекой requests
- Метод getitem для доступа к элементам последовательности
- Динамическая типизация в Python
- Преобразование строки в число
- Анализ кода — Python
- Проектирование Singleton с метаклассом
- Красивый вывод списка
- Создание и использование ChainMap















