Курс 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
- Вычисление фазы комплексного числа
- Мониторинг работы программы Py-spy
- Основные методы NumPy
- Библиотека schedule: планировщик задач
- Создание задания в Cron
- Многострочные комментарии в Python
- Нахождение разницы между списками в Python
- Создание .exe файла с pyinstaller
- Функции в Python: создание и вызов
- Отступы в Python
- Изменения в обработке логических значений
- Метод lt для сортировки объектов
- Объединение списков в Python.
- Преобразование чисел в слова
- Скрытие вывода данных
- Лямбда-функции в defaultdict
- Перевернуть список в Python
- Создание и операции с дробями
- Копирование в Python
- Разделение функций на этапы
- Декораторы для регистрации функций
- Метод get() в Python
- Форматирование строк в Python
- Проблемы с именами переменных
- Сортировка с параметром key
- Логические значения в Python
- Проверка дубликатов в Python
- Нахождение максимального значения и его индекса в списке
- Преобразование объекта в строку
- Управление IP-адресами через прокси
- Метод eq для сравнения объектов
- Переменные класса и экземпляра
- Работа с библиотекой xkcd
- Многострочные комментарии в Python
- Метод classmethod
- Создание GUI на Tkinter
- Новшества Flask 2.0
- Методы и функции в Python
- Тестирование времени с Freezegun
- Курс по дообучению ChatGPT
- Удаление ключей из словаря
- Генераторы по генератору
- Обработка исключения UnboundLocalError
- Расчет времени выполнения
- Пропуск начальных строк с помощью dropwhile()















