Курс Python → Переменная Шредингера
Переменная Шредингера (ч.2) — это явление, когда при определении функции внутри цикла, использующей переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Это означает, что функция будет искать переменную в окружающем контексте, вместо того, чтобы использовать значение переменной в момент создания функции.
Это приводит к тому, что все функции будут использовать последнее значение, присвоенное переменной в цикле. Например, если у нас есть цикл, в котором переменная x меняется на каждой итерации, и внутри этого цикла мы определяем функцию, использующую x, то эта функция будет использовать последнее значение x из окружающего контекста.
Пример кода, демонстрирующий переменную Шредингера:
for x in range(3):
def func():
print(x)
func()
В этом примере функция func будет использовать последнее значение переменной x после завершения цикла. Таким образом, при вызове func на каждой итерации цикла, будет выведено значение x из окружающего контекста, а не значение x на момент создания функции.
Избежать переменной Шредингера можно, например, передавая значение переменной в качестве аргумента функции или используя замыкания. Это позволит функции использовать конкретное значение переменной, а не искать его в окружающем контексте.
Другие уроки курса "Python"
- Метод округления чисел
- Делегирование в Python
- Визуализация пропусков данных
- Наиболее частотные элементы с помощью Counter
- Enum в Python
- Работа с URL-адресами в Python
- Доступ к локальным переменным
- Создание треугольника Паскаля
- Проверка подстроки в строке
- Создание объекта времени
- Объединение кортежей в Python
- Переворот списка в Python
- Разделение строки в Python
- Создание функций высшего порядка
- Роль object и type в Python
- Фильтрация входных данных в Python
- Подписка на @SelectelNews
- Правила именования переменных
- Переопределение оператора % для объектов
- Синтаксис переменных цикла в Python
- Изменение элемента списка
- Python Тесты и Гайды
- Перебор элементов списка в Python
- Метод __call__ в Python
- Работа с географическими данными в Python
- Переворот последовательности
- Сумма элементов списка
- Избегайте использования goto
- Работа с itertools
- Аннотации типов в Python
- Создание генераторов в Python
- Потоковый ввод в Python
- Различия символов в Python
- Вычисление натурального логарифма в NumPy
- Установка и использование Virtualenv
- Работа с CSV файлами в Python
- Поиск уникальных элементов строкой в Python
- Работа с файлами в Python
- Декораторы в Python
- Счетчик ссылок в Python
- Метод __getitem__ в Python
- Перегрузка операторов в Python
- Многопроцессорное программирование в Python
- Хеши в Python
- Метод enumerate() в Python
- Непрерывная проверка в Python















