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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Основы слова
  2. Структурирование данных с Pydantic
  3. Работа со строками в Python
  4. Python Тесты и Гайды
  5. Удаление элементов из списка
  6. Сериализация и десериализация объектов
  7. Многострочные строки в Python
  8. Непрерывная проверка в Python
  9. Работа с Path в Python
  10. Метод rename() для переименования файлов и каталогов
  11. Генераторы словарей и множеств
  12. Проверка списка: any() и all()
  13. Создание спинбокса в tkinter
  14. Подписка на @SelectelNews
  15. Генерация случайных чисел в Python
  16. Проверка кортежей.
  17. Progress с библиотекой tqdm
  18. Область видимости переменных в Python
  19. Лямбда-функции в defaultdict
  20. Удаление элементов из списка в Python
  21. Использование обратной косой черты в f-строках
  22. Python reversed() vs срез[::-1]
  23. Перевод текста с Python Translator
  24. Методы shutil для работы с файлами
  25. Сравнение объектов в Python
  26. Капитализация строк
  27. Создание списков в Python
  28. Глобальные переменные в Python
  29. Метод split() для разделения строк
  30. Python: Фильтрация списков с помощью filter()
  31. Управление контекстом выполнения кода
  32. Получение пути к текущему скрипту с помощью os
  33. Передача аргументов через **arguments
  34. Оператор «not» в Python
  35. Применение команды break
  36. Игра Виселица на Python
  37. Аннотации типов в Python
  38. Карта бомбоубежищ в Москве и Питере
  39. Python 3.12: Псевдонимы типов
  40. Изменение регистра данных
  41. Оператор del в Python
  42. Асинхронный код в Python
  43. Непрерывная проверка в Python

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