Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Работа со словарями в Python
- Классы данных в Python
- Ошибка NotImplemented в Python
- Функция pow() — возвести число в степень
- Метод remove() для удаления элемента из списка
- Работа с множествами в Python
- Работа с итераторами в Python
- Функция zip() в Python
- Работа с *args и **kwargs в Python
- Работа с многоуровневыми словарями в Python
- Создание объекта времени
- Определение объема памяти объекта
- Создание задания в Cron
- Создание циклической ссылки
- Счетчик в Python: most_common()
- Расчет времени выполнения программы
- Разрешение имен в Python
- Инициализация переменных
- Структурирование именованных констант
- Удаление специальных символов с помощью re.sub
- Освобождение памяти в Python
- Оболочка Python
- Удаление ссылок в Python
- Аннотации типов в Python
- Копирование словарей и списков в Python
- Lambda Functions in Python
- Создание словарей в Python
- Анализ текста на русском языке с помощью Pymystem3
- Оператор == в Python
- Объединение множеств в Python
- Асинхронное программирование с asyncio
- Импортирование в Python
- Именованные кортежи в Python
- Обработка исключений в Python
- Обработка ошибок в Python
- Метод invert для побитового отрицания
- Получение частей дроби
- Транспонирование 2D-массива с помощью zip
- Форматирование данных с помощью pprint
- Просмотр атрибутов и методов класса
- Работа с Requests для HTTP-запросов
- Работа с набором данных CIFAR10 в PyTorch
- Измерение времени выполнения кода в Python
- Распаковка с оператором *
- Хэш-функции и метод цепочек
- Итерация по копии коллекции















