Курс 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"
- Проверка на палиндром
- Обновление шаблона base.html
- Списковые включения в Python
- ChainMap избыточные ключи
- Разделение функций на этапы
- Установка виртуального окружения Python
- Метод get() для словарей
- Протокол управления контекстом
- Классы данных в Python
- Работа с парами ключ-значение
- Работа с Event() в threading
- Проверка кортежей.
- Профилирование кода на Python
- Пустой оператор pass в Python
- Логирование в Python
- Форматирование строк в Python
- Numpy: объединение массивов
- Фильтрация списка от «ложных» значений
- Удаление дубликатов из списка
- Генерация случайных чисел Python
- Генерация тестовых данных с factory_boy
- Цикл for в Python
- Вывод переменной и строки в Python
- Новшества Flask 2.0
- Установка и использование pyshorteners
- Работа с SQLite в Python
- Работа с argparse
- Вычисление фазы комплексного числа
- Парсинг статей с Newspaper3k
- Вызов внешних программ в Python с помощью sh
- Чтение бинарного файла в Python.
- Настройка вывода в Numpy
- Поиск индексов подстроки
- Оператор continue в Python
- Многострочные комментарии в Python
- Чтение и запись TOML-конфигов
- Анонимные функции Lambda
- Работа с контекстным менеджером Pool
- Сравнение def и lambda в Python
- Модуль pprint
- Вычисление натуральных логарифмов в NumPy
- Разделение строки в Python
- Генераторы в Python
- Подписка на @SelectelNews
- Метод radd для пользовательских чисел
- Создание списка через итерацию















