Курс Python → Переменная Шредингера

Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.

Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.

Пример кода, демонстрирующий переменную Шредингера:


for x in range(3):
    def func():
        print(x)
    func()

В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.

Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Создание циклической ссылки
  2. Переменная с нижним подчеркиванием
  3. Проверка версии Python
  4. Просмотр атрибутов и методов класса
  5. Проекты на Python
  6. Создание объекта времени
  7. Установка и использование модуля Wikipedia
  8. Копирование объектов в Python
  9. Работа с аргументами командной строки
  10. CLI-инструмент howdoi
  11. Блок try…finally в Python
  12. Проверка переменных окружения в Python
  13. Создание графиков в терминале
  14. Работа с базами данных SQLite
  15. Транспонирование матрицы в Python
  16. Методы работы со строками в Python
  17. Перевод эмодзи и эмотиконов.
  18. Работа с массивами в Python
  19. Печать комбинаций в Python с Itertools
  20. Различия символов в Python
  21. Методы работы со списками
  22. Фильтрация данных в Python.
  23. Модуль math: основные функции
  24. Python itertools combinations() — группировка элементов
  25. Оператор space-invader
  26. Преобразование текста в нижний регистр
  27. Функциональное программирование.
  28. Counter() — подсчет элементов
  29. Создание словарей в Python
  30. Генератор чисел Фибоначчи
  31. Блок else в циклах Python
  32. Сортировка с помощью key
  33. Удаление знаков препинания в Python
  34. Фильтрация списков с itertools
  35. Метод difference_update() — разность множеств
  36. Работа с библиотекой requests
  37. Метод getitem для доступа к элементам последовательности
  38. Динамическая типизация в Python
  39. Преобразование строки в число
  40. Анализ кода — Python
  41. Проектирование Singleton с метаклассом
  42. Красивый вывод списка
  43. Создание и использование ChainMap

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