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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Объединение словарей в Python
  2. Использование функции enumerate()
  3. Комментарии в Python
  4. Проектирование Singleton с метаклассом
  5. Логирование с Logzero
  6. Генераторы и сеты в Python
  7. Установка и использование TensorFlow
  8. Bootle — простой веб-фреймворк
  9. Получение списка кортежей из словаря
  10. Функция eval() в Python
  11. Работа с географическими данными.
  12. Измерение времени выполнения кода
  13. Генерация строк с .join()
  14. Структурирование данных с Pydantic
  15. Генераторы в Python
  16. Переворот списка в Python
  17. Блок try-except-else
  18. Обработка исключения UnboundLocalError
  19. Вывод баннеров
  20. Разность множеств
  21. Работа с файлами в Python
  22. Методы и функции в Python
  23. Блок else в обработке исключений
  24. Импорт классов из другого файла
  25. Работа с enumerate()
  26. Повторение элементов в Python
  27. EMOT преобразование эмодзи в текст
  28. Переопределение метода __eq__
  29. Сортировка слиянием
  30. Создание новых функций через partial
  31. Особенности множеств в Python
  32. Считывание бинарного файла в Python
  33. Вывод переменной и строки в Python
  34. Установка максимального количества цифр
  35. Работа с JSON данными в Python
  36. Анализ текста на русском языке с помощью Pymystem3
  37. Получение текущей директории
  38. Создание объекта времени
  39. Особенности ключей словаря в Python
  40. Перевод эмодзи и эмотиконов.
  41. Именованные срезы в Python
  42. Переворот строки с помощью срезов
  43. Частичное применение функций в Python
  44. Преобразование PowerPoint в PDF.

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