Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Нахождение хеша для бесконечности и NaN в Python
- Блок else в Python
- Измерение времени выполнения кода с использованием time
- Импорт модулей в Python 3.12
- Создание словаря и множества
- Модуль antigravity: генерация координат
- Определение объема памяти объекта
- Сложные типы данных в Python
- Работа с срезами в Python
- Работа с YAML в Python
- Установка и загрузка Instaloader
- Сортировка HTML по CSS-селектору
- Python 3.12: Псевдонимы типов
- Непрерывная проверка в Python
- Основы работы со строками в Python
- Проверка подстроки в строке с помощью in
- Retrying в Python: повторные вызовы
- Создание уникального проекта
- Создание матрицы в Python
- Транспонирование 2D-массива с помощью zip
- Удаление элементов из списка в Python
- Конструктор в Python
- Цикл for в Python
- Декораторы в Python
- Раздувающийся словарь в Python
- Работа со словарями Python
- Оптимизация гиперпараметров с Scikit Optimize
- Генерация UUID в Python
- Создание вкладок с TKinter
- Циклы for в Python
- Управление User-Agent в Python
- Объединение словарей в Python
- Преобразование регистра символов
- Python Менеджер контекста
- Отправка POST запроса на сервер.
- Разбиение текста в Python
- Наследование в программировании
- Декораторы в Python
- Уникальность ключей в словаре
- Удаление символов новой строки в Python.
- Метод title() в Python
- Перевод текста с Python Translator
- Повторение и перенос строки
- Python: изменяемые и неизменяемые коллекции
- Python-dateutil — работа с датами
- Создание функций с произвольным количеством аргументов















