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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Подсчет элементов с помощью Counter из collections
  2. Хранение данных с помощью dataclasses
  3. Операции с датами в Python
  4. Оформление кода на Python
  5. Безопасные SQL-запросы в Python 3.11
  6. Python Ellipsis использование
  7. Декораторы в Python
  8. Преобразование списка в словарь через генератор
  9. Определение функций с необязательными аргументами
  10. Декоратор total_ordering для сравнения объектов
  11. Поток данных в Python
  12. Область видимости переменных
  13. Функция reversed() в Python
  14. Получение идентификатора объекта в памяти
  15. Создание матрицы в Python
  16. Создание треугольника Паскаля
  17. Инициализация объекта
  18. Работа с рекламными данными в Pandas
  19. Работа с аргументами командной строки в Python
  20. Комментарии в Python
  21. Обработка исключений в Python
  22. Создание генераторов
  23. Работа со словарями
  24. Переопределение метода __or__()
  25. Импортирование в Python
  26. Метод setdefault() в Python
  27. Хеширование паролей с солью
  28. Идентификатор объекта в Python
  29. Исправление ошибки NameError
  30. Область видимости переменных
  31. Проверка на палиндром
  32. Проверка условий: all и any
  33. Получение частей дроби
  34. Подсчет количества элементов в списке
  35. Итерация по коллекции в Python
  36. Декораторы с аргументами в Python
  37. Генераторы списков в Python
  38. Склеивание строк без циклов
  39. Использование defaultdict в Python
  40. Скачать видео с YouTube
  41. Создание директории в Python
  42. Удаление элемента из списка
  43. Обучение модели с указанием эпох

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