Курс 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 за 14 дней
  4. Модуль subprocess: запуск внешних команд
  5. Работа с массивами в Numpy
  6. Многострочные строки в Python
  7. Получение списка файлов в директории с использованием os
  8. Переменные в Python
  9. Комментарии в Python
  10. Работа с утверждениями в Python
  11. Операции с датами в Python
  12. Оператор zip в Python
  13. Методы classmethod и staticmethod
  14. Анализ текста на русском языке с помощью Pymystem3
  15. Установка и использование библиотеки google
  16. Генерация строк с .join()
  17. Дефолтные параметры в Python
  18. Разделение строк в Python
  19. Сортировка в Python
  20. Виртуальные среды в Python
  21. Solidity для DeFi Ethereum
  22. Dict Comprehension в Python
  23. Простой калькулятор Python
  24. Настройка Cron
  25. JMESPath в Python
  26. Flask: создание веб-приложений
  27. Форматирование строк в Python
  28. Переворот списка в Python
  29. Различия символов в Python
  30. Вложенные генераторы в Python
  31. PEP-401: оператор
  32. Оптимизация поиска в словарях
  33. Работа с SQLite в Python
  34. Переопределение метода xor в Python
  35. Непрерывная проверка в Python
  36. Метод join() для объединения элементов
  37. Преобразование регистра строк
  38. Перемешивание списка с shuffle()
  39. Метод rlshift для битового сдвига
  40. Управление ресурсами с контекстными менеджерами
  41. Удаление элемента из списка
  42. Метод __irshift__ для Python
  43. Создание именованных кортежей в Python
  44. Форматирование чисел в Python
  45. Карта бомбоубежищ в Москве и Питере
  46. Получение комбинаций в Python
  47. Замеры производительности в Python

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