Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Основы работы с базами данных в Python
- Форматирование строк с помощью f-строк
- Модуль antigravity: генерация координат
- Метод __irshift__ для побитового сдвига вправо
- Форматирование строк в Python
- Удаление ссылок в Python
- Модуль subprocess: запуск внешних команд
- Принцип одной функции
- Переопределение метода xor в Python
- Импорт модулей и пакетов в Python
- Автоматизация скриптов на AWS Lightsail.
- Создание пустых функций и классов в Python
- Работа с argparse
- Основные методы NumPy
- Переменная с нижним подчеркиванием
- Установка и обучение ChatterBot
- Оператор += для объединения строк
- Создание даты из строки ISO
- Применение функции map() с лямбда-функциями
- Списковое включение в Python
- Декораторы в Python
- Работа с асинхронными задачами в Python
- Область видимости переменных
- Конвертация текстовых чисел с помощью Numerizer
- Модуль itertools: комбинации и перестановки
- Работа со словарями Python
- Тип CodeType в Python.
- Конкатенация строк в Python
- Получение комбинаций в Python
- Копирование в Python
- F-строки в Python
- Декораторы в Python
- Нахождение отличий в списках
- Глубокое копирование объектов
- Обработка исключения UnboundLocalError
- Удаление знаков препинания в Python
- Срез в Python
- Оптимизация строк в Python
- F-строки в Python 3.8
- Разделение строки с регулярными выражениями
- Тернарный оператор в Python
- Объединение Python и Shell
- Функции all() и any() в Python
- Проверка класса объекта
- Преобразование текста в речь с Python
- Форматирование строк в Python
- Перемещение и удаление файлов в Python















