Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Основы слова
- Структурирование данных с Pydantic
- Работа со строками в Python
- Python Тесты и Гайды
- Удаление элементов из списка
- Сериализация и десериализация объектов
- Многострочные строки в Python
- Непрерывная проверка в Python
- Работа с Path в Python
- Метод rename() для переименования файлов и каталогов
- Генераторы словарей и множеств
- Проверка списка: any() и all()
- Создание спинбокса в tkinter
- Подписка на @SelectelNews
- Генерация случайных чисел в Python
- Проверка кортежей.
- Progress с библиотекой tqdm
- Область видимости переменных в Python
- Лямбда-функции в defaultdict
- Удаление элементов из списка в Python
- Использование обратной косой черты в f-строках
- Python reversed() vs срез[::-1]
- Перевод текста с Python Translator
- Методы shutil для работы с файлами
- Сравнение объектов в Python
- Капитализация строк
- Создание списков в Python
- Глобальные переменные в Python
- Метод split() для разделения строк
- Python: Фильтрация списков с помощью filter()
- Управление контекстом выполнения кода
- Получение пути к текущему скрипту с помощью os
- Передача аргументов через **arguments
- Оператор «not» в Python
- Применение команды break
- Игра Виселица на Python
- Аннотации типов в Python
- Карта бомбоубежищ в Москве и Питере
- Python 3.12: Псевдонимы типов
- Изменение регистра данных
- Оператор del в Python
- Асинхронный код в Python
- Непрерывная проверка в Python















