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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Работа с аргументами командной строки
  2. Работа с zip()
  3. Обработка ошибок в JSON данных
  4. Функции any() и all() в Python
  5. kwargs в Python
  6. Объединение словарей в Python
  7. Передача параметров в Python
  8. Протокол управления контекстом
  9. Список импортированных модулей в Python
  10. Преобразование данных в Python
  11. Сравнение строк в Python
  12. Управление контекстом выполнения кода
  13. *args и **kwargs в Python
  14. Работа с модулем glob в Python
  15. Группы исключений в Python
  16. Работа со строками
  17. Цикл for в Python
  18. Сравнение def и lambda функций в Python
  19. Antigravity модуль
  20. Преобразование документов в PDF с помощью Spire.Office
  21. Работа с файлами в Python
  22. Типы возвращаемых значений в Python
  23. Транспонирование матрицы
  24. Работа с комплексными числами
  25. Метод rpow в Python
  26. Подписка на каналы разработчиков
  27. Получение локальных переменных в Python
  28. Удаление ссылок в Python
  29. Lambda-функция в Python: использование с map() и sum()
  30. Пропуск начальных строк с помощью dropwhile()
  31. Освобождение памяти в Python
  32. Округление дробей в Python
  33. Виртуальные среды в Python
  34. Работа с контекстным менеджером Pool
  35. Упрощение работы с JSON-данными в Python
  36. Параллельные вычисления в Python
  37. Встраивание HTML в Jupyter Notebook
  38. Профилирование данных с Pandas
  39. Поиск файлов по шаблону
  40. Проверка запуска скрипта или импорта модуля
  41. None в Python: использование и особенности
  42. Избегание изменяемых аргументов
  43. Работа с датой и временем в Python
  44. Контроль точности вывода чисел
  45. Присоединение элементов коллекции

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