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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Сокращение ссылок с pyshorteners
  2. Lambda Functions in Python
  3. Поиск элементов BeautifulSoup
  4. Удаление элементов из списка в Python
  5. Вычисление фазы комплексного числа
  6. EMOT преобразование эмодзи в текст
  7. Создание списков в Python
  8. Резервирование символов в Python
  9. Разделение строки с помощью re.split()
  10. Округление чисел с помощью round
  11. Функции-генераторы в Python
  12. Гибкие функции Python
  13. Метод setdefault() в Python
  14. Функциональное программирование.
  15. Перевернуть список в Python
  16. Оператор умножения для вектора
  17. Переворот строки с использованием цикла
  18. Блок try…finally в Python
  19. Списки: объединение, изменение
  20. Разделение строки в Python
  21. Группы исключений в Python
  22. Метод count() для списка
  23. Работа с датой и временем в Python
  24. Извлечение аудио из видео
  25. Python enumerate() для работы с индексами
  26. Использование модуля math
  27. Хэш-функции и метод цепочек
  28. Сортировка HTML-элементов
  29. Добавление элемента в список.
  30. Методы list в Python
  31. Инверсия списков и строк в Python
  32. Копирование списков в Python
  33. Генераторы в Python
  34. Работа с CSV в Python
  35. Получение списка кортежей из словаря
  36. Освобождение памяти в Python
  37. Обновление данных через PUT запрос
  38. Изменение элемента списка
  39. Использование двоеточия в Python
  40. Конвертация изображений в PDF
  41. Переопределение метода delitem в Python
  42. Работа с PosixPath() в Python
  43. Работа с NumPy массивами
  44. Объединение строк с помощью метода join
  45. Пространство имен в Python

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