Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Деление в Python
- Генераторы списков в Python
- Явный импорт переменных
- Модуль Antigravity в Python 3
- Списковый компрехеншен.
- Сортировка в Python
- Работа с географическими данными в Python
- Использование модуля math
- Кортежи в Python: особенности и преимущества
- Переворот строки с использованием цикла
- Оптимизация параметров в Python
- Тест скорости набора текста на Python
- Функция pow() — возвести число в степень
- Манипуляция формой массива в Numpy
- Операторы Splat и splatty-splat
- Функции map, filter, reduce
- Установка и использование Python-dateutil
- Значения по умолчанию в Python
- Подсчет частотности элементов в Python
- Модуль itertools: комбинации и перестановки
- Использование модуля __future__
- Метод rmatmul для пользовательских матриц
- Создание генераторов
- Отрицательные индексы списков в Python
- f-строки в формате строк
- Измерение времени выполнения кода
- Наследование в программировании
- Замена текста с re.sub()
- Условное добавление элементов в список
- Ускорение обработки данных с %autoawait
- Методы __repr__ и __str__ в Python
- Генераторы в Python
- Профилирование кода
- Подсчет вхождений элементов
- Хранение переменных в словаре.
- Удаление ресурса в Python
- Ограничение итераций в Python
- Метод invert для побитового отрицания
- Метод __imod__ для Python
- Сортировка в Python
- Генераторы в Python
- Пространство имен в Python
- Декоратор для группы пользователей в Django
- Автоматизация с Python
- Взаимодействие с внешними процессами в Python
- Подписка на каналы разработчиков
- Итерация по копии коллекции















