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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Протокол управления контекстом
  2. Решение переменной Шредингера
  3. Работа с кортежами в Python
  4. Работа с коллекциями Python
  5. Оператор «or» в Python
  6. Управление ресурсами с контекстными менеджерами
  7. Удаление символа из строки
  8. Открытие и запись файлов
  9. Установка и обучение ChatterBot
  10. Добавление элементов в список: append() vs extend()
  11. Работа с Colorama
  12. Python reversed() функция
  13. Роль object и type в Python
  14. Подсчет количества элементов в списке
  15. Генераторы и сеты в Python
  16. Сравнение объектов в Python
  17. Получение значений из словарей
  18. Принцип одной функции
  19. Вложенные генераторы в Python
  20. Поиск подстроки в строке
  21. Тестирование с unittest
  22. Подробная информация о %pinfo
  23. Многострочные комментарии в Python
  24. Удаление специальных символов с помощью re.sub
  25. Избегайте изменяемых аргументов
  26. Генераторы списков
  27. Парсинг веб-страниц с Beautiful Soup
  28. Генераторы в Python
  29. Анализ текста на русском языке с помощью Pymystem3
  30. Упрощение условных выражений с тернарным оператором
  31. Создание словарей с defaultdict()
  32. Применение команды break
  33. Установка Git и AWS CLI
  34. Функция reversed() в Python
  35. Участие в LP стейкинге Waves
  36. Значения по умолчанию в Python
  37. Преобразование Excel в PDF с Spire.XLS
  38. Метод ne для сравнения объектов
  39. Проверка типов с помощью isinstance
  40. Математические функции в Python
  41. Установка и использование pyshorteners
  42. Исключение NotImplementedError
  43. Создание именованных кортежей в Python
  44. Python и Монти Пайтон
  45. Оператор += в Python
  46. Отображение графиков в Jupyter с Matplotlib
  47. Работа с NumPy.linalg
  48. Сериализация данных в JSON с помощью json.dumps

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