Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Отправка HTTP-запросов в Python
- Установка и использование pyshorteners
- Глубокое копирование объектов
- Копирование списков в Python
- Переменная Шредингера
- Получение текущей директории
- Работа с множествами в Python
- Оператор continue в Python
- Python Метод sleep() из time
- Именованные срезы в Python
- Лямбда-функции в Python
- Возврат нескольких значений
- Создание комплексных чисел
- Оператор in для Python
- Функция __init__ в Python
- Функция zip() в Python
- Переопределение метода xor в Python
- Срезы в Numpy
- Присоединение элементов коллекции
- capitalize() — изменение регистра первого символа строки
- Расчет времени выполнения программы
- Форматирование вывода списков
- Получение комбинаций в Python
- Инвертирование словаря
- Преобразование списка в словарь через генератор
- Мониторинг памяти с Pympler
- Применение функций в Python
- Декораторы в Python
- Изменение объектов в Python
- Цикл while в Python
- Пересечение списков с использованием множеств
- Добавление Progressbar в Python
- Объединение списков в Python
- Использование super() в Python
- Разрешение имен в Python
- Иерархия классов в Python
- Работа с модулем random
- Python: библиотеки и функции
- Модуль subprocess: запуск внешних команд
- Определение относительного пути
- Создание даты из строки ISO
- Объединение кортежей в Python
- Объединение словарей в Python
- Определение наиболее частого элемента с помощью collections.Counter
- Метод rxor для операции побитового исключающего «или»
- Непрерывная проверка в Python
- Активация Matplotlib в Jupyter















