Курс 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"
- Списки в Python
- Работа с очередями в Python
- Проверка строки на палиндром
- Обновление ключей в Python
- Подсчет элементов в Python
- Регулярные выражения в Python
- Дефолтные параметры в Python
- Печать календаря
- Принципы LSP и ISP в Python
- Python 3.12: переиспользование кавычек
- Преобразование Excel в PDF с Spire.XLS
- Цикл for в Python
- Группировка элементов Python
- Переопределение оператора % для объектов
- Получение имени функции с помощью inspect
- Курс Data Scientist в медицине
- Преобразование данных в Python
- Очистка данных с Pandas
- Обработка ошибок в Python
- Реализация операции -= для пользовательского класса
- Встроенные функции Python
- Создание словаря в Python
- Вывод с переменной через запятую
- Отображение HTML кода в Python
- Создание итератора
- Python: отсутствие точек с запятыми
- Импортирование в Python
- Метод count() для списков
- inspect в Python: анализ кода
- Метод get() для словарей
- Установка и использование модуля Wikipedia
- Поток данных в Python
- Эффективная конкатенация строк в Python
- Python itertools combinations() — группировка элементов
- Метод enumerate() в Python
- Функции map() и reduce() в Python
- Numpy: разбиение массивов
- Сохранение и загрузка модели в PyTorch
- Функциональное программирование.
- Анонимные функции в Python
- Упрощенный вывод данных в Python
- Отладка в командной строке
- Работа с WindowsPath()
- Работа с кортежами
- Шаблоны и наследование в Flask
- Работа с географическими данными.
- Печать комбинаций в Python с Itertools
- Структуры данных в Python
- Solidity для DeFi Ethereum















