Курс 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. Ошибка NotImplemented в Python
  4. Функция pow() — возвести число в степень
  5. Метод remove() для удаления элемента из списка
  6. Работа с множествами в Python
  7. Работа с итераторами в Python
  8. Функция zip() в Python
  9. Работа с *args и **kwargs в Python
  10. Работа с многоуровневыми словарями в Python
  11. Создание объекта времени
  12. Определение объема памяти объекта
  13. Создание задания в Cron
  14. Создание циклической ссылки
  15. Счетчик в Python: most_common()
  16. Расчет времени выполнения программы
  17. Разрешение имен в Python
  18. Инициализация переменных
  19. Структурирование именованных констант
  20. Удаление специальных символов с помощью re.sub
  21. Освобождение памяти в Python
  22. Оболочка Python
  23. Удаление ссылок в Python
  24. Аннотации типов в Python
  25. Копирование словарей и списков в Python
  26. Lambda Functions in Python
  27. Создание словарей в Python
  28. Анализ текста на русском языке с помощью Pymystem3
  29. Оператор == в Python
  30. Объединение множеств в Python
  31. Асинхронное программирование с asyncio
  32. Импортирование в Python
  33. Именованные кортежи в Python
  34. Обработка исключений в Python
  35. Обработка ошибок в Python
  36. Метод invert для побитового отрицания
  37. Получение частей дроби
  38. Транспонирование 2D-массива с помощью zip
  39. Форматирование данных с помощью pprint
  40. Просмотр атрибутов и методов класса
  41. Работа с Requests для HTTP-запросов
  42. Работа с набором данных CIFAR10 в PyTorch
  43. Измерение времени выполнения кода в Python
  44. Распаковка с оператором *
  45. Хэш-функции и метод цепочек
  46. Итерация по копии коллекции

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