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

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

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

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


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

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

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

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

Автор урока

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

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

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

  1. Основы работы с базами данных в Python
  2. Форматирование строк с помощью f-строк
  3. Модуль antigravity: генерация координат
  4. Метод __irshift__ для побитового сдвига вправо
  5. Форматирование строк в Python
  6. Удаление ссылок в Python
  7. Модуль subprocess: запуск внешних команд
  8. Принцип одной функции
  9. Переопределение метода xor в Python
  10. Импорт модулей и пакетов в Python
  11. Автоматизация скриптов на AWS Lightsail.
  12. Создание пустых функций и классов в Python
  13. Работа с argparse
  14. Основные методы NumPy
  15. Переменная с нижним подчеркиванием
  16. Установка и обучение ChatterBot
  17. Оператор += для объединения строк
  18. Создание даты из строки ISO
  19. Применение функции map() с лямбда-функциями
  20. Списковое включение в Python
  21. Декораторы в Python
  22. Работа с асинхронными задачами в Python
  23. Область видимости переменных
  24. Конвертация текстовых чисел с помощью Numerizer
  25. Модуль itertools: комбинации и перестановки
  26. Работа со словарями Python
  27. Тип CodeType в Python.
  28. Конкатенация строк в Python
  29. Получение комбинаций в Python
  30. Копирование в Python
  31. F-строки в Python
  32. Декораторы в Python
  33. Нахождение отличий в списках
  34. Глубокое копирование объектов
  35. Обработка исключения UnboundLocalError
  36. Удаление знаков препинания в Python
  37. Срез в Python
  38. Оптимизация строк в Python
  39. F-строки в Python 3.8
  40. Разделение строки с регулярными выражениями
  41. Тернарный оператор в Python
  42. Объединение Python и Shell
  43. Функции all() и any() в Python
  44. Проверка класса объекта
  45. Преобразование текста в речь с Python
  46. Форматирование строк в Python
  47. Перемещение и удаление файлов в Python

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