Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Отслеживание прогресса с tqdm
- Склеивание строк через метод join()
- Создание уникального множества
- Ускоренный импорт библиотек
- capitalize() — изменение регистра первого символа строки
- Генераторы в Python
- Инверсия списков и строк в Python
- Просмотр внешнего файла в Python
- Передача словаря через **kwargs
- Изменение логики работы с временем
- Именованные аргументы в Python
- Преобразование символов с помощью map
- Объединение строк с помощью метода join
- Оптимизация памяти с slots
- Сравнение строк в Python
- Получение атрибутов и методов класса
- Удаление первого элемента списка
- Ограничение ресурсов в Python
- Обработка ошибки IndexError
- Поиск индексов в списке
- Генераторы в Python
- Удаление элементов из списка в Python
- Функция с **kwargs в Python
- Именованные кортежи в Python
- Печать календаря в Python
- Переопределение метода __and__
- Определение имен функций
- Очистка данных в Python
- Установка и использование howdoi
- Генерация UUID в Python
- Быстрый поиск кода
- Работа со временем в Python
- Функция count() в Python
- Операции с числами в Python
- Просмотр атрибутов и методов класса
- Избегайте изменяемых аргументов
- Объединение кортежей в Python
- Создание словарей в Python
- Проверка надежности пароля на Python
- UserList в Python: Описание и примеры использования
- Протокол управления контекстом
- Значения по умолчанию в Python
- Аргументы *args и **kwargs
- Возврат нескольких значений
- Лямбда-функции в Python















