Курс 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
- Разбиение строки в Python
- Основы Python за 14 дней
- Модуль subprocess: запуск внешних команд
- Работа с массивами в Numpy
- Многострочные строки в Python
- Получение списка файлов в директории с использованием os
- Переменные в Python
- Комментарии в Python
- Работа с утверждениями в Python
- Операции с датами в Python
- Оператор zip в Python
- Методы classmethod и staticmethod
- Анализ текста на русском языке с помощью Pymystem3
- Установка и использование библиотеки google
- Генерация строк с .join()
- Дефолтные параметры в Python
- Разделение строк в Python
- Сортировка в Python
- Виртуальные среды в Python
- Solidity для DeFi Ethereum
- Dict Comprehension в Python
- Простой калькулятор Python
- Настройка Cron
- JMESPath в Python
- Flask: создание веб-приложений
- Форматирование строк в Python
- Переворот списка в Python
- Различия символов в Python
- Вложенные генераторы в Python
- PEP-401: оператор
- Оптимизация поиска в словарях
- Работа с SQLite в Python
- Переопределение метода xor в Python
- Непрерывная проверка в Python
- Метод join() для объединения элементов
- Преобразование регистра строк
- Перемешивание списка с shuffle()
- Метод rlshift для битового сдвига
- Управление ресурсами с контекстными менеджерами
- Удаление элемента из списка
- Метод __irshift__ для Python
- Создание именованных кортежей в Python
- Форматирование чисел в Python
- Карта бомбоубежищ в Москве и Питере
- Получение комбинаций в Python
- Замеры производительности в Python















