Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Блок else в циклах.
- Исключение NotImplementedError
- Строковое представление объектов
- Функция enumerate() в Python
- Создание списков в Python
- Создание матрицы в Python
- Получение локальных переменных в Python
- Удаление знаков препинания в Python
- Создание и операции с дробями
- Разделение строк в Python
- Аргумент по умолчанию
- Особенности множеств в Python
- UserList в Python: Описание и примеры использования
- Комментарии в Python
- Оператор is в Python
- Функция map() и ленивая оценка
- Проверка подстроки в строке
- Зарезервированные слова в Python
- Работа с множествами в Python
- Непрерывная проверка в Python
- Многопроцессорное программирование в Python
- Python Метод sleep() времени
- Создание Telegram-бота на Python
- Принципы Zen of Python
- Работа с PosixPath() в Python
- Функции-генераторы в Python
- capitalize() — изменение регистра первого символа строки
- Установка пакетов с помощью pip
- Преобразование числа в восьмеричную строку
- Очистка входных данных
- Динамическая типизация в Python
- Создание детектора плагиата
- Обработка ошибок в Python
- Избегайте ошибку FileNotFoundError
- Генерация случайных чисел в Python
- Ограничение итераций в Python
- Тернарный оператор в Python
- Подсказки типов в Python
- Классы данных в Python
- Оператор is в Python
- Просмотр внешних файлов в %pycat
- Секреты Python
- Удаление дубликатов из списка с помощью dict.fromkeys
- Преобразование данных в Python
- Поиск индексов подстроки
- TypedDict для kwargs в Python 3.12
- Инициализация объекта















