Курс 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"

  1. Декораторы в Python
  2. Разделение строки на подстроки в Python
  3. Счетчик ссылок в Python
  4. Работа с timedelta в Python
  5. Создание новых функций с помощью functools.partial
  6. Создание словарей с defaultdict()
  7. Расширение операции побитового «и» в Python
  8. Многострочные комментарии в Python
  9. Ограничение ресурсов в Python
  10. Тестирование функции сложения
  11. Методы работы со строками в Python
  12. Непрерывная проверка в Python
  13. Хеши в Python
  14. Установка и загрузка Instaloader
  15. Пространство имен в Python
  16. Множественное присваивание в Python
  17. Конкатенация строк в Python
  18. Асинхронный код в Python
  19. Функции map() и reduce() в Python
  20. F-строки в Python
  21. Извлечение аудио из видео
  22. Метод rrshift для пользовательских объектов
  23. Многострочные строки в Python
  24. Векторизация в Python с NumPy.
  25. Красивый вывод списка
  26. Работа со словарями с defaultdict из collections
  27. Атрибуты массивов в Numpy
  28. Обработка исключений в Python
  29. Работа с геоданными с помощью geopy
  30. Изменение переменной в Python: nonlocal
  31. Документация функции help() в Python
  32. Python Enum Weekday Usage
  33. Обновление шаблона base.html
  34. Создание и обучение модели с Keras
  35. Получение значений из словарей
  36. Работа с YAML в Python
  37. Извлечение новостей с newspaper3k
  38. Генерация строк с .join()
  39. Измерение времени выполнения кода
  40. Транспонирование 2D-массива с помощью zip
  41. Лямбда-функции в Python
  42. Переопределение метода __and__

Marketello читают маркетологи из крутых компаний