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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Комментарии в Python.
  2. Создание списка через итерацию
  3. Проверка подстроки в строке с помощью in
  4. Роль ключевого слова self
  5. Python и Монти Пайтон
  6. UserList в Python: Описание и примеры использования
  7. Работа с getopt
  8. Разделение функций на этапы
  9. Участие в LP стейкинге Waves
  10. Транспонирование 2D-массива с помощью zip
  11. Магические методы в Python
  12. Генераторы данных
  13. Поиск с помощью регулярных выражений
  14. Оператор морж в Python 3.8
  15. Справка по импортированным модулям
  16. Списковые включения в Python
  17. Приоритет операций в Python
  18. Нахождение пересечения множеств
  19. Форматирование кода на Python
  20. Работа с URL-адресами в Python
  21. Логирование с Logzero
  22. Использование подчеркивания в REPL
  23. Поиск email
  24. Создание списков в Python
  25. Аннотации типов в Python
  26. Создание новых функций через partial
  27. Строковое представление объектов
  28. Тестирование функции сложения
  29. Функции с необязательными аргументами
  30. Логирование в Python
  31. Функция enumerate в Python
  32. Округление в Python
  33. Проверка условий в Python
  34. Расчет времени выполнения кода
  35. Функция enumerate() в Python
  36. Удаление и повторная вставка ключа в OrderedDict
  37. Замена элементов в списке с помощью генераторов списков
  38. Генератор списка с условием if
  39. Преобразование в float
  40. Многоточие в Python
  41. Потоковый ввод в Python
  42. Работа с модулем os в Python
  43. Подсчет количества элементов в списке
  44. Печать в одной строке
  45. Хэш-функции в Python
  46. Документирование функций в Python
  47. Округление банкира в Python
  48. Перевод двоичного кода в целое число
  49. Блок try-except-else
  50. Оператор «or» в Python

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