Курс 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
- Класс UserDict: дополнительная функциональность
- Измерение времени выполнения кода в Python
- Реализация операции -= для пользовательского класса
- Отрицательные индексы списков в Python
- Форматирование кода на Python
- Взаимодействие с внешними процессами в Python
- Объединение списков в строку
- Метод __call__ в Python
- Запуск Python из интерпретатора
- Логирование с Logzero
- Обезопасьте ввод данных
- Функции any() и all() в Python
- Функция enumerate() в Python
- Лямбда-функции в Python
- Создание словаря с значением по умолчанию
- Переворот последовательности
- Работа со словарями Python
- Работа с часовыми поясами в Python.
- Удаление URL-адресов в Python
- Срезы в Python
- Поиск простых чисел
- Оператор Walrus в Python
- split() — разделение строки
- Функция enumerate в Python
- Обработка исключений в Python
- Множественное присваивание в Python
- Объединение словарей в Python
- Изменение IP-адреса в Python
- Преобразование чисел в Python
- Работа с deque в Python
- Замеры производительности в Python
- Чтение и запись TOML-конфигов
- Python Аргументы по умолчанию
- Фильтрация списков с itertools
- Цепные операции в Python
- Изменения в обработке логических значений
- Замыкания в Python
- Бинарный поиск
- Создание новых списков в Python
- Использование type hints
- Печать комбинаций в Python с Itertools
- Генераторы в Python
- Генераторы в Python
- Проверка типа объекта в Python
- Профилирование данных с Pandas















