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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Нахождение хеша для бесконечности и NaN в Python
  2. Блок else в Python
  3. Измерение времени выполнения кода с использованием time
  4. Импорт модулей в Python 3.12
  5. Создание словаря и множества
  6. Модуль antigravity: генерация координат
  7. Определение объема памяти объекта
  8. Сложные типы данных в Python
  9. Работа с срезами в Python
  10. Работа с YAML в Python
  11. Установка и загрузка Instaloader
  12. Сортировка HTML по CSS-селектору
  13. Python 3.12: Псевдонимы типов
  14. Непрерывная проверка в Python
  15. Основы работы со строками в Python
  16. Проверка подстроки в строке с помощью in
  17. Retrying в Python: повторные вызовы
  18. Создание уникального проекта
  19. Создание матрицы в Python
  20. Транспонирование 2D-массива с помощью zip
  21. Удаление элементов из списка в Python
  22. Конструктор в Python
  23. Цикл for в Python
  24. Декораторы в Python
  25. Раздувающийся словарь в Python
  26. Работа со словарями Python
  27. Оптимизация гиперпараметров с Scikit Optimize
  28. Генерация UUID в Python
  29. Создание вкладок с TKinter
  30. Циклы for в Python
  31. Управление User-Agent в Python
  32. Объединение словарей в Python
  33. Преобразование регистра символов
  34. Python Менеджер контекста
  35. Отправка POST запроса на сервер.
  36. Разбиение текста в Python
  37. Наследование в программировании
  38. Декораторы в Python
  39. Уникальность ключей в словаре
  40. Удаление символов новой строки в Python.
  41. Метод title() в Python
  42. Перевод текста с Python Translator
  43. Повторение и перенос строки
  44. Python: изменяемые и неизменяемые коллекции
  45. Python-dateutil — работа с датами
  46. Создание функций с произвольным количеством аргументов

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