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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Декораторы классов
  2. Объединение списков с использованием itertools.chain
  3. Деление в Python
  4. Кортеж в Python: создание и использование
  5. Генератор чисел Фибоначчи
  6. Установка random seed в Python
  7. Экранирование символов в Python
  8. Преобразование строк в числа в Python
  9. Функции-генераторы в Python
  10. Beautiful Soup — извлечение данных из HTML
  11. Склеивание строк без циклов
  12. Создание словаря и множества
  13. Операторы Splat и splatty-splat
  14. Создание словарей с defaultdict
  15. Оператор объединения словарей
  16. Создание словарей в Python
  17. Извлечение аудио из видео
  18. Проверка окончания строки с помощью str.endswith()
  19. Работа с CSV файлами
  20. Python 3.12: переиспользование кавычек
  21. Создание и использование модулей в Python
  22. Оптимизация памяти с помощью __slots__
  23. Именованные кортежи в Python
  24. Освобождение памяти в Python
  25. Динамические маршруты во Flask
  26. Ключевое слово global в Python
  27. Аннотации типов в Python
  28. Управление контекстом выполнения кода
  29. Генерация резюме в Gensim
  30. Лямбда-функции в Python
  31. Создание коллекций из выражения-генератора
  32. Поиск уникальных и повторяющихся элементов
  33. Удаление ссылок в Python
  34. Enum в Python: создание и использование перечислений
  35. Конвертация текстовых чисел с помощью Numerizer
  36. Создание класса очереди
  37. Взаимодействие с sys
  38. Метод ne для сравнения объектов
  39. Python reversed() vs срез[::-1]
  40. Область видимости переменных
  41. Работа со словарями
  42. Список переменных с %who
  43. Проверка памяти объекта
  44. Удаление элементов из списка в Python

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