Курс Python → Решение переменной Шредингера
Переменная Шредингера — это понятие из программирования, которое описывает ситуацию, когда значения переменных в коде кажутся разными на разных этапах выполнения программы. В данном случае, переменная x меняется на каждой итерации цикла до добавления функции some_func к списку funcs, но все функции в списке в итоге возвращают одно и то же значение 6 после завершения цикла.
Это происходит из-за того, что функции, добавленные в список funcs, сохраняют ссылку на переменную x на момент их добавления. Таким образом, при вызове функций после завершения цикла, они все обращаются к последнему значению x, которое было в цикле — в данном случае, 6.
Для решения проблемы переменной Шредингера в Python можно использовать замыкания (closures). Вместо того, чтобы передавать переменную x напрямую в функцию some_func, можно создать вложенную функцию, которая будет запоминать значение x на момент создания.
def create_closure(x):
def some_func():
return x
return some_func
funcs = []
for i in range(1, 6):
funcs.append(create_closure(i))
for func in funcs:
print(func())
В этом примере функция create_closure создает замыкание с переменной x, которая фиксирует значение x на момент создания функции some_func. Таким образом, каждая функция в списке funcs будет возвращать свое уникальное значение x, как было задумано изначально.
Другие уроки курса "Python"
- Замер времени выполнения кода
- Переопределение метода __rshift__
- Необязательные аргументы в Python
- Бесконечная проверка в Python
- Выборка чисел
- Метод __irshift__ для побитового сдвига вправо
- Сравнение def и lambda функций в Python
- Карта бомбоубежищ в Москве и Питере
- Функции map, filter, reduce
- Обмен переменными в Jupyter
- Печать комбинаций в Python с Itertools
- Работа с датой и временем в Python
- Функция pow() — возвести число в степень
- Генераторы в Python
- Циклы for в Python
- История Python
- Установка пакетов с помощью pip
- Функции с необязательными аргументами
- Ветвление выражения в Python
- Печать в одной строке
- Метод title() в Python
- Проверка дубликатов в Python
- Принципы программирования
- Переворот строки с использованием цикла
- Удаление файлов и папок в Python
- Оптимизация создания строк
- Комментарии в Python
- Переопределение метода __pow__
- Оператор walrus в Python
- IPython и Jupyter Notebook: руководство
- Создание Radio кнопок в tkinter
- Mad Libs Generator
- Переворот строки
- Группировка элементов Python
- Поиск самого длинного слова в списке с использованием max()
- Хэш-функции и метод цепочек
- Оператор continue в Python
- Инверсия списка и строки
- Просмотр внешнего файла в Python
- Получение срезов итераторов
- CSV строка разделение в Python
- Фильтрация последовательности
- Документирование функций в Python
- Работа с эмодзи в Python
- Форматирование строк в Python















