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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Метод округления чисел
  2. Делегирование в Python
  3. Визуализация пропусков данных
  4. Наиболее частотные элементы с помощью Counter
  5. Enum в Python
  6. Работа с URL-адресами в Python
  7. Доступ к локальным переменным
  8. Создание треугольника Паскаля
  9. Проверка подстроки в строке
  10. Создание объекта времени
  11. Объединение кортежей в Python
  12. Переворот списка в Python
  13. Разделение строки в Python
  14. Создание функций высшего порядка
  15. Роль object и type в Python
  16. Фильтрация входных данных в Python
  17. Подписка на @SelectelNews
  18. Правила именования переменных
  19. Переопределение оператора % для объектов
  20. Синтаксис переменных цикла в Python
  21. Изменение элемента списка
  22. Python Тесты и Гайды
  23. Перебор элементов списка в Python
  24. Метод __call__ в Python
  25. Работа с географическими данными в Python
  26. Переворот последовательности
  27. Сумма элементов списка
  28. Избегайте использования goto
  29. Работа с itertools
  30. Аннотации типов в Python
  31. Создание генераторов в Python
  32. Потоковый ввод в Python
  33. Различия символов в Python
  34. Вычисление натурального логарифма в NumPy
  35. Установка и использование Virtualenv
  36. Работа с CSV файлами в Python
  37. Поиск уникальных элементов строкой в Python
  38. Работа с файлами в Python
  39. Декораторы в Python
  40. Счетчик ссылок в Python
  41. Метод __getitem__ в Python
  42. Перегрузка операторов в Python
  43. Многопроцессорное программирование в Python
  44. Хеши в Python
  45. Метод enumerate() в Python
  46. Непрерывная проверка в Python

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