Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Декораторы классов
- Объединение списков с использованием itertools.chain
- Деление в Python
- Кортеж в Python: создание и использование
- Генератор чисел Фибоначчи
- Установка random seed в Python
- Экранирование символов в Python
- Преобразование строк в числа в Python
- Функции-генераторы в Python
- Beautiful Soup — извлечение данных из HTML
- Склеивание строк без циклов
- Создание словаря и множества
- Операторы Splat и splatty-splat
- Создание словарей с defaultdict
- Оператор объединения словарей
- Создание словарей в Python
- Извлечение аудио из видео
- Проверка окончания строки с помощью str.endswith()
- Работа с CSV файлами
- Python 3.12: переиспользование кавычек
- Создание и использование модулей в Python
- Оптимизация памяти с помощью __slots__
- Именованные кортежи в Python
- Освобождение памяти в Python
- Динамические маршруты во Flask
- Ключевое слово global в Python
- Аннотации типов в Python
- Управление контекстом выполнения кода
- Генерация резюме в Gensim
- Лямбда-функции в Python
- Создание коллекций из выражения-генератора
- Поиск уникальных и повторяющихся элементов
- Удаление ссылок в Python
- Enum в Python: создание и использование перечислений
- Конвертация текстовых чисел с помощью Numerizer
- Создание класса очереди
- Взаимодействие с sys
- Метод ne для сравнения объектов
- Python reversed() vs срез[::-1]
- Область видимости переменных
- Работа со словарями
- Список переменных с %who
- Проверка памяти объекта
- Удаление элементов из списка в Python















