Курс 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. Метод classmethod
  2. Возврат нескольких значений
  3. Python Метод Union Множеств
  4. Аннотации типов в Python
  5. Обработка ошибки IndexError
  6. Разработка Telegram-ботов
  7. Работа с каталогами в Python
  8. Работа с географическими данными.
  9. Генераторные функции в Python
  10. Генераторы списков в Python
  11. Класс-оболочка для словарей
  12. Переворот строки с помощью срезов
  13. Подсказки при вводе данных в Python
  14. Работа с геоданными с помощью geopy
  15. Управление User-Agent в Python
  16. Обмен значений переменных в Python
  17. Создание задания в Cron
  18. Работа с кортежами в Python
  19. Настройка нарезки списков
  20. Combobox в Tkinter
  21. Работа со строками в Python
  22. Дизассемблирование Python кода
  23. Метод join() для объединения элементов строки
  24. Отправка POST-запроса в REST API
  25. Python enumerate() использование
  26. Изменение регистра данных
  27. Вывод букв строки в Python
  28. Проверка на истинность объектов в Python
  29. Функции классификации комплексных чисел
  30. Управление доступом к модулю
  31. Очистка строки в Python
  32. Подсчет элементов в Python
  33. Документация функции help() в Python
  34. Регистрация на TenChat
  35. Генераторы в Python
  36. Python OrderedDict и fromkeys() — работа с словарями
  37. Работа с множествами в Python
  38. Разделение строки в Python
  39. Основы работы с os
  40. Управление памятью в numpy.
  41. Список методов и атрибутов
  42. Профилирование кода
  43. Установка и использование модуля Wikipedia
  44. Основные методы NumPy
  45. Многострочные строки в Python
  46. Подсчет элементов в Python
  47. Каналы Senior: Python, Java, Frontend, SQL, C++

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