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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Деление в Python
  2. Генераторы списков в Python
  3. Явный импорт переменных
  4. Модуль Antigravity в Python 3
  5. Списковый компрехеншен.
  6. Сортировка в Python
  7. Работа с географическими данными в Python
  8. Использование модуля math
  9. Кортежи в Python: особенности и преимущества
  10. Переворот строки с использованием цикла
  11. Оптимизация параметров в Python
  12. Тест скорости набора текста на Python
  13. Функция pow() — возвести число в степень
  14. Манипуляция формой массива в Numpy
  15. Операторы Splat и splatty-splat
  16. Функции map, filter, reduce
  17. Установка и использование Python-dateutil
  18. Значения по умолчанию в Python
  19. Подсчет частотности элементов в Python
  20. Модуль itertools: комбинации и перестановки
  21. Использование модуля __future__
  22. Метод rmatmul для пользовательских матриц
  23. Создание генераторов
  24. Отрицательные индексы списков в Python
  25. f-строки в формате строк
  26. Измерение времени выполнения кода
  27. Наследование в программировании
  28. Замена текста с re.sub()
  29. Условное добавление элементов в список
  30. Ускорение обработки данных с %autoawait
  31. Методы __repr__ и __str__ в Python
  32. Генераторы в Python
  33. Профилирование кода
  34. Подсчет вхождений элементов
  35. Хранение переменных в словаре.
  36. Удаление ресурса в Python
  37. Ограничение итераций в Python
  38. Метод invert для побитового отрицания
  39. Метод __imod__ для Python
  40. Сортировка в Python
  41. Генераторы в Python
  42. Пространство имен в Python
  43. Декоратор для группы пользователей в Django
  44. Автоматизация с Python
  45. Взаимодействие с внешними процессами в Python
  46. Подписка на каналы разработчиков
  47. Итерация по копии коллекции

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