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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Отправка HTTP-запросов в Python
  2. Установка и использование pyshorteners
  3. Глубокое копирование объектов
  4. Копирование списков в Python
  5. Переменная Шредингера
  6. Получение текущей директории
  7. Работа с множествами в Python
  8. Оператор continue в Python
  9. Python Метод sleep() из time
  10. Именованные срезы в Python
  11. Лямбда-функции в Python
  12. Возврат нескольких значений
  13. Создание комплексных чисел
  14. Оператор in для Python
  15. Функция __init__ в Python
  16. Функция zip() в Python
  17. Переопределение метода xor в Python
  18. Срезы в Numpy
  19. Присоединение элементов коллекции
  20. capitalize() — изменение регистра первого символа строки
  21. Расчет времени выполнения программы
  22. Форматирование вывода списков
  23. Получение комбинаций в Python
  24. Инвертирование словаря
  25. Преобразование списка в словарь через генератор
  26. Мониторинг памяти с Pympler
  27. Применение функций в Python
  28. Декораторы в Python
  29. Изменение объектов в Python
  30. Цикл while в Python
  31. Пересечение списков с использованием множеств
  32. Добавление Progressbar в Python
  33. Объединение списков в Python
  34. Использование super() в Python
  35. Разрешение имен в Python
  36. Иерархия классов в Python
  37. Работа с модулем random
  38. Python: библиотеки и функции
  39. Модуль subprocess: запуск внешних команд
  40. Определение относительного пути
  41. Создание даты из строки ISO
  42. Объединение кортежей в Python
  43. Объединение словарей в Python
  44. Определение наиболее частого элемента с помощью collections.Counter
  45. Метод rxor для операции побитового исключающего «или»
  46. Непрерывная проверка в Python
  47. Активация Matplotlib в Jupyter

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