Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Комментарии в Python.
- Создание списка через итерацию
- Проверка подстроки в строке с помощью in
- Роль ключевого слова self
- Python и Монти Пайтон
- UserList в Python: Описание и примеры использования
- Работа с getopt
- Разделение функций на этапы
- Участие в LP стейкинге Waves
- Транспонирование 2D-массива с помощью zip
- Магические методы в Python
- Генераторы данных
- Поиск с помощью регулярных выражений
- Оператор морж в Python 3.8
- Справка по импортированным модулям
- Списковые включения в Python
- Приоритет операций в Python
- Нахождение пересечения множеств
- Форматирование кода на Python
- Работа с URL-адресами в Python
- Логирование с Logzero
- Использование подчеркивания в REPL
- Поиск email
- Создание списков в Python
- Аннотации типов в Python
- Создание новых функций через partial
- Строковое представление объектов
- Тестирование функции сложения
- Функции с необязательными аргументами
- Логирование в Python
- Функция enumerate в Python
- Округление в Python
- Проверка условий в Python
- Расчет времени выполнения кода
- Функция enumerate() в Python
- Удаление и повторная вставка ключа в OrderedDict
- Замена элементов в списке с помощью генераторов списков
- Генератор списка с условием if
- Преобразование в float
- Многоточие в Python
- Потоковый ввод в Python
- Работа с модулем os в Python
- Подсчет количества элементов в списке
- Печать в одной строке
- Хэш-функции в Python
- Документирование функций в Python
- Округление банкира в Python
- Перевод двоичного кода в целое число
- Блок try-except-else
- Оператор «or» в Python















