Курс Python → Решение переменной Шредингера
Переменная Шредингера — это понятие из программирования, которое описывает ситуацию, когда значения переменных в коде кажутся разными на разных этапах выполнения программы. В данном случае, переменная x меняется на каждой итерации цикла до добавления функции some_func к списку funcs, но все функции в списке в итоге возвращают одно и то же значение 6 после завершения цикла.
Это происходит из-за того, что функции, добавленные в список funcs, сохраняют ссылку на переменную x на момент их добавления. Таким образом, при вызове функций после завершения цикла, они все обращаются к последнему значению x, которое было в цикле — в данном случае, 6.
Для решения проблемы переменной Шредингера в Python можно использовать замыкания (closures). Вместо того, чтобы передавать переменную x напрямую в функцию some_func, можно создать вложенную функцию, которая будет запоминать значение x на момент создания.
def create_closure(x):
def some_func():
return x
return some_func
funcs = []
for i in range(1, 6):
funcs.append(create_closure(i))
for func in funcs:
print(func())
В этом примере функция create_closure создает замыкание с переменной x, которая фиксирует значение x на момент создания функции some_func. Таким образом, каждая функция в списке funcs будет возвращать свое уникальное значение x, как было задумано изначально.
Другие уроки курса "Python"
- Создание GUI с Tkinter: Entry
- Создание и удаление объектов
- Удаление символов новой строки в Python.
- Работа со слайсами
- ROT13 Шифр Цезаря в Python
- Импортирование в Python
- Метод join() для объединения строк
- Основы работы с базами данных в Python
- Python Метод sleep() из time
- Абстракции словарей и множеств в Python
- Экранирование символов в Python
- Сортировка с помощью параметра key
- Создание словарей и множеств в Python
- Установка и использование Python-dateutil
- Многопоточность и асинхронное программирование в Python
- Библиотека schedule: планировщик задач
- Чтение и запись TOML-конфигов
- Генераторы в Python
- Особенности ключей словаря в Python
- Управление User-Agent в Python
- Создание вложенного генератора
- Работа с аргументами командной строки
- Руководство по Pymorphy2
- Применение функции к элементам списка
- Работа со словарями Python
- Работа с очередями в Python
- Просмотр атрибутов и методов класса
- Получение срезов итераторов
- Работа с географическими данными.
- Обработка исключения UnboundLocalError
- Сериализация и десериализация объектов
- Упрощение условных выражений с тернарным оператором
- Нан-рефлексивность в Python
- Условные выражения в Python
- Пересечение списков с использованием множеств
- Цикл for в Python
- Оформление кода по PEP 8
- Сравнение def и lambda в Python
- Сортировка HTML по CSS-селектору
- Комментарии в Python.
- Управление сессиями в Python
- List Comprehension Tutorial
- Операторы объединения в Python 3.9
- Ключевое слово global в Python















