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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Отслеживание прогресса с tqdm
  2. Склеивание строк через метод join()
  3. Создание уникального множества
  4. Ускоренный импорт библиотек
  5. capitalize() — изменение регистра первого символа строки
  6. Генераторы в Python
  7. Инверсия списков и строк в Python
  8. Просмотр внешнего файла в Python
  9. Передача словаря через **kwargs
  10. Изменение логики работы с временем
  11. Именованные аргументы в Python
  12. Преобразование символов с помощью map
  13. Объединение строк с помощью метода join
  14. Оптимизация памяти с slots
  15. Сравнение строк в Python
  16. Получение атрибутов и методов класса
  17. Удаление первого элемента списка
  18. Ограничение ресурсов в Python
  19. Обработка ошибки IndexError
  20. Поиск индексов в списке
  21. Генераторы в Python
  22. Удаление элементов из списка в Python
  23. Функция с **kwargs в Python
  24. Именованные кортежи в Python
  25. Печать календаря в Python
  26. Переопределение метода __and__
  27. Определение имен функций
  28. Очистка данных в Python
  29. Установка и использование howdoi
  30. Генерация UUID в Python
  31. Быстрый поиск кода
  32. Работа со временем в Python
  33. Функция count() в Python
  34. Операции с числами в Python
  35. Просмотр атрибутов и методов класса
  36. Избегайте изменяемых аргументов
  37. Объединение кортежей в Python
  38. Создание словарей в Python
  39. Проверка надежности пароля на Python
  40. UserList в Python: Описание и примеры использования
  41. Протокол управления контекстом
  42. Значения по умолчанию в Python
  43. Аргументы *args и **kwargs
  44. Возврат нескольких значений
  45. Лямбда-функции в Python

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