Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Распаковка аргументов в Python
- Преобразование генераторов в циклы
- Оператор * в Python
- Работа с итераторами в Python
- Метод сравнения объектов в Python
- Генератор данных в Keras
- Изменяемые и неизменяемые объекты
- Импорт модулей в Python 3.12
- Возврат нескольких значений из функции
- Удаление файлов с shutil.os.remove()
- Транспонирование матрицы
- Итерация по итерируемым объектам
- Управление ресурсами с контекстными менеджерами
- Работа с NumPy
- Работа с NumPy.linalg
- Сравнение строк в Python
- Работа с итераторами через срезы
- Удаление дубликатов с помощью множеств
- Оператор «not» в Python
- Список и кортеж в Python
- Поиск индекса элемента в списке
- Работа с классами данных
- Создание новых списков в Python
- Сравнение def и lambda в Python
- Раздувающийся словарь в Python
- Создание файла с проверкой ошибки
- Шаблоны Flask: условия и циклы
- Python: отсутствие точек с запятыми
- Избегание изменяемых аргументов
- Разделение строки с регулярными выражениями
- Форматирование строк с помощью f-строк
- Копирование объектов в Python
- Оптимизация памяти с помощью __slots__
- Получение текущей директории
- Подписка на каналы разработчиков
- Поиск подстроки в строке
- Копирование списков в Python
- Использование type hints
- Функция divmod() в Python
- Названия переменных
- Обновление множества в Python
- Операторы присваивания в Python
- Оформление кода на Python
- Перезапуск ячейки в Jupyter Notebook с dostoevsky
- Codecademy в Telegram
- Введение в Python
- Открытие и запись файлов
- Метод __iand__ для пользовательских классов















