Курс 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"
- Генерация случайных чисел в Python
- Команда %dhist — список посещенных каталогов
- Принципы Zen Python
- Метод get() для словарей
- Использование defaultdict в Python
- Применение команды break
- Форматирование данных с pprint
- Срезы в Python
- Добавление элемента к кортежу
- Генерация случайных чисел в Python
- Получение идентификатора объекта в памяти
- Big O оптимизация
- Создание и инициализация объектов
- Создание объекта timedelta
- Сортировка данных в Python
- Создание словарей и множеств в Python
- Удаление файлов с shutil.os.remove()
- Преобразование букв в нижний регистр
- Объединение списков с помощью zip
- Оператор break в Python
- Переменная Шредингера
- Контекстный менеджер в Python
- Профилирование с Pandas
- Метод Self в Python
- Цикл for в Python
- Поиск файлов по шаблону
- Комментарии в Python
- Работа с датами в Python
- Работа с географическими данными.
- Генераторы в Python
- Работа с аргументами командной строки
- Профилирование данных с Pandas
- Объединение кортежей в Python
- Получение обратного списка чисел
- Создание обратного итератора
- Установка пакетов с помощью pip
- Установка пакета в Python
- Обмен значений переменных в Python
- Замыкания в Python
- Методы работы со строками в Python
- Оптимизация памяти с помощью __slots__
- Разделение функций на этапы
- Преобразование текста в речь с Python
- Декодирование байтов в строку















