Курс 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"
- Генератор бросков кубиков
- Docstring в Python
- Проверка элемента в множестве.
- Функции map() и reduce() в Python
- Поиск индекса элемента в списке
- Структуры данных в Python
- Принципы Zen Python
- Defaultdict в Python
- Использование модуля math
- Преобразование кортежа в словарь.
- Анализ текста на русском языке с помощью Pymystem3
- Сравнение объектов в Python
- Работа с collections в Python
- Операции с матрицами в Python
- Удаление элемента по индексу
- Декоратор защиты анонимных пользователей
- Импорт классов из другого файла
- Использование defaultdict в Python
- Хранение переменных в словаре.
- Ключевое слово global в Python
- PEP-401: оператор
- Оптимизация создания строк
- Работа с аргументами командной строки в Python
- Удаление эмодзи с помощью pandas
- Преобразование символов с помощью map
- Модуль itertools: эффективная работа с итераторами
- Работа с контекст-менеджером «with»
- Запуск внешних программ с subprocess
- Определение имен функций
- Оформление текста в консоли с TermColor
- Добавление элементов в список
- Хранение переменных в Python.
- Ускорение обработки данных с %autoawait
- Работа с PosixPath() в Python
- Генераторы в Python
- Решатель судоку на Python с pygame
- Сглаживание списка
- Аннотации типов в Python
- Объединение списков в Python
- Нахождение отличий в списках
- Мониторинг памяти с Pympler















