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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Реализация метода __abs__ в Python
  2. Очистка данных с помощью pandas
  3. Измерение времени выполнения кода
  4. Переопределение метода len
  5. Работа с CSV файлами
  6. Удаление дубликатов с помощью множеств
  7. Инверсия списков и строк в Python
  8. Применение функции к списку
  9. Работа с zip-архивами в Python
  10. Срезы в Python
  11. Метод join() для объединения элементов строки
  12. F-строки в Python
  13. Чтение и запись TOML-конфигов
  14. Сортировка в Python
  15. Сглаживание списка
  16. Установка Python3.7 и PIP
  17. Регистрация на хакатоне
  18. Форматирование вывода с F-строками
  19. Python reversed() функция
  20. Форматирование строк в Python
  21. Форматирование данных с помощью pprint
  22. Метод join для объединения строк
  23. Удаление элемента из списка
  24. Метод invert для побитового отрицания
  25. Работа с коллекциями Python
  26. Работа со строками в Python
  27. Получение текущей даты и времени с помощью datetime
  28. SciPy: широкий функционал для математических операций
  29. Методы HTTP запросов в Flask
  30. Список переменных в Python
  31. Сортировка с помощью key
  32. Функция с *args.
  33. Нахождение хеша для бесконечности и NaN в Python
  34. Списки в Python: синтаксис представления
  35. Поиск уникальных и повторяющихся элементов
  36. Работа с процессами в Python
  37. Подсчет вхождений элементов
  38. Сортировка данных с лямбда-функциями
  39. Использование метода lower()
  40. Хеши в Python
  41. Метод remove() для удаления элемента из списка
  42. Поиск частого элемента
  43. TypedDict для kwargs в Python 3.12
  44. Печать календаря
  45. Работа с CSV файлами в Python
  46. Хеширование паролей с солью
  47. Python Ellipsis использование

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