Курс 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
- Работа с timedelta в Python
- Создание новых функций с помощью functools.partial
- Создание словарей с defaultdict()
- Расширение операции побитового «и» в Python
- Многострочные комментарии в Python
- Ограничение ресурсов в Python
- Тестирование функции сложения
- Методы работы со строками в Python
- Непрерывная проверка в Python
- Хеши в Python
- Установка и загрузка Instaloader
- Пространство имен в Python
- Множественное присваивание в Python
- Конкатенация строк в Python
- Асинхронный код в Python
- Функции map() и reduce() в Python
- F-строки в Python
- Извлечение аудио из видео
- Метод rrshift для пользовательских объектов
- Многострочные строки в Python
- Векторизация в Python с NumPy.
- Красивый вывод списка
- Работа со словарями с defaultdict из collections
- Атрибуты массивов в Numpy
- Обработка исключений в Python
- Работа с геоданными с помощью geopy
- Изменение переменной в Python: nonlocal
- Документация функции help() в Python
- Python Enum Weekday Usage
- Обновление шаблона base.html
- Создание и обучение модели с Keras
- Получение значений из словарей
- Работа с YAML в Python
- Извлечение новостей с newspaper3k
- Генерация строк с .join()
- Измерение времени выполнения кода
- Транспонирование 2D-массива с помощью zip
- Лямбда-функции в Python
- Переопределение метода __and__















