Курс 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. Установка Home Assistant
  2. Основы работы с os
  3. Antigravity модуль
  4. Основы работы со списками
  5. Сумма элементов списка
  6. Работа с очередями в Python
  7. Метод rmatmul для обратного матричного умножения
  8. Функции-генераторы в Python
  9. Разделение строки с помощью re.split()
  10. Преобразование генераторов в циклы
  11. Функция findall() для поиска вхождений строки
  12. Модуль inspect
  13. Преобразование строки в число
  14. Метод setdefault() в Python
  15. Обработка ошибок ввода данных
  16. Метод gt в Python
  17. Работа с изображениями Pillow
  18. Обработка ошибки IndexError
  19. Локальные переменные.
  20. Избегайте пустого списка
  21. f-строки в формате строк
  22. Работа с GitHub в Telegram
  23. Преобразование PowerPoint в PDF.
  24. Принципы LSP и ISP в Python
  25. Инициализация структур данных
  26. Создание матрицы в Python
  27. Определение относительного пути
  28. Группы исключений в Python
  29. Работа с множествами в Python
  30. Обход дочерних элементов BeautifulSoup
  31. Присвоение и ссылки
  32. Удаление файлов в Python
  33. Передача неизвестных аргументов в Python.
  34. Enum в Python
  35. Добавление элемента к кортежу
  36. Фильтрация последовательности
  37. Определение основы слова с showballstemmer
  38. Методы HTTP запросов в Flask
  39. Оптимизация интернирования строк
  40. Удаление дубликатов из списка
  41. Печать календаря в Python
  42. Создание и использование ChainMap
  43. Генераторы в Python
  44. Структура данных deque в Python
  45. Генератор надежных паролей

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