Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Объединение словарей в Python
- Использование функции enumerate()
- Комментарии в Python
- Проектирование Singleton с метаклассом
- Логирование с Logzero
- Генераторы и сеты в Python
- Установка и использование TensorFlow
- Bootle — простой веб-фреймворк
- Получение списка кортежей из словаря
- Функция eval() в Python
- Работа с географическими данными.
- Измерение времени выполнения кода
- Генерация строк с .join()
- Структурирование данных с Pydantic
- Генераторы в Python
- Переворот списка в Python
- Блок try-except-else
- Обработка исключения UnboundLocalError
- Вывод баннеров
- Разность множеств
- Работа с файлами в Python
- Методы и функции в Python
- Блок else в обработке исключений
- Импорт классов из другого файла
- Работа с enumerate()
- Повторение элементов в Python
- EMOT преобразование эмодзи в текст
- Переопределение метода __eq__
- Сортировка слиянием
- Создание новых функций через partial
- Особенности множеств в Python
- Считывание бинарного файла в Python
- Вывод переменной и строки в Python
- Установка максимального количества цифр
- Работа с JSON данными в Python
- Анализ текста на русском языке с помощью Pymystem3
- Получение текущей директории
- Создание объекта времени
- Особенности ключей словаря в Python
- Перевод эмодзи и эмотиконов.
- Именованные срезы в Python
- Переворот строки с помощью срезов
- Частичное применение функций в Python
- Преобразование PowerPoint в PDF.















