Курс 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
- Парсинг веб-страниц с Beautiful Soup
- Метод rmatmul для пользовательских матриц
- Работа со словарями
- Подсчет элементов с помощью Counter из collections
- Импорт и использование модулей в Python
- Метод setitem в Python
- Генератор списка с условием if
- Модуль antigravity: генерация координат
- Установка и использование Python-dateutil
- Библиотека funcy: удобные утилиты
- Атрибуты массивов в Numpy
- Удаление ключа из словаря в Python
- Игра Виселица на Python
- Чтение бинарного файла в Python.
- Проверка файла .py на синтаксис.
- Преобразование данных в Python
- Множественное присваивание в Python
- Работа с zip-архивами в Python
- Генераторные выражения и islice.
- Удаление элементов из списка в Python.
- Работа со словарями с defaultdict из collections
- Python enumerate() функции
- Копирование и вставка текста в Python
- Добавление вложенных списков
- Отступы в Python
- Возврат нескольких значений из функции
- Блок else в Python
- Подробная информация о %pinfo
- Вывод баннеров
- Метод split() в Python
- Запуск внешнего кода в Jupyter
- Создание веб-приложения с Flask
- Отправка POST-запроса в REST API
- Бинарный поиск
- Python Calendar Usage
- Экранирование символов в Python
- Работа с getopt
- Установка и использование emoji
- Нахождение отличий в списках
- Генераторы и сеты в Python
- Сравнение объектов в Python
- Отделение звука от видео
- Скачать видео с YouTube
- Модуль subprocess: запуск внешних команд
- Работа с кортежами
- Объединение словарей в Python















