Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Подсчет элементов с помощью Counter из collections
- Хранение данных с помощью dataclasses
- Операции с датами в Python
- Оформление кода на Python
- Безопасные SQL-запросы в Python 3.11
- Python Ellipsis использование
- Декораторы в Python
- Преобразование списка в словарь через генератор
- Определение функций с необязательными аргументами
- Декоратор total_ordering для сравнения объектов
- Поток данных в Python
- Область видимости переменных
- Функция reversed() в Python
- Получение идентификатора объекта в памяти
- Создание матрицы в Python
- Создание треугольника Паскаля
- Инициализация объекта
- Работа с рекламными данными в Pandas
- Работа с аргументами командной строки в Python
- Комментарии в Python
- Обработка исключений в Python
- Создание генераторов
- Работа со словарями
- Переопределение метода __or__()
- Импортирование в Python
- Метод setdefault() в Python
- Хеширование паролей с солью
- Идентификатор объекта в Python
- Исправление ошибки NameError
- Область видимости переменных
- Проверка на палиндром
- Проверка условий: all и any
- Получение частей дроби
- Подсчет количества элементов в списке
- Итерация по коллекции в Python
- Декораторы с аргументами в Python
- Генераторы списков в Python
- Склеивание строк без циклов
- Использование defaultdict в Python
- Скачать видео с YouTube
- Создание директории в Python
- Удаление элемента из списка
- Обучение модели с указанием эпох















