Курс 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. Блок else в обработке исключений
  5. Создание и обучение модели с Keras
  6. Улучшенные подсказки для импорта в Python 3.12
  7. Игра «Угадывание чисел»
  8. Оператор is в Python
  9. Статическая типизация в Python
  10. Подсчет частотности элементов в Python
  11. Работа с модулем Calendar
  12. Наследование в программировании
  13. Основы работы с базами данных в Python
  14. Навыки Python: строки, типы данных
  15. Библиотека Emoji: использование смайлов в Python
  16. Оператор «not» в Python
  17. Метод title() в Python
  18. Использование defaultdict в Python
  19. Проверка файла .py на синтаксис.
  20. Метод setdefault() в Python
  21. Открытие, чтение и закрытие файла
  22. Форматирование данных с помощью pprint
  23. Переменная с нижним подчеркиванием
  24. Установка и использование emoji
  25. Создание тестовых данных с Faker
  26. Управление памятью в Python
  27. Расширение информации об ошибке в Python
  28. Именованные аргументы в Python
  29. Печать списка с помощью метода join
  30. Преобразование регистра символов
  31. Отправка HTTP-запросов с User-Agent
  32. Определение индекса элемента списка
  33. Транспонирование 2D-массива с помощью zip
  34. Отслеживание выполнения программы с библиотекой tqdm
  35. Оптимизация методов в Python 3.7
  36. Сортировка с помощью key
  37. Создание обратного итератора
  38. Логирование с Logzero
  39. Просмотр файла в Jupyter Noteboo
  40. Объединение словарей в Python 3.5+
  41. Использование обратной косой черты в f-строках
  42. Философия Python
  43. Проверка элемента в множестве.

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