Курс 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"
- Работа с необработанными строками
- Функция zip() в Python
- Работа с defaultdictами в Python
- Логический оператор «and» в Python
- Курсы Яндекс Практикум
- Объединение строк с помощью метода join
- Дефолтные параметры в Python
- Создание таблиц в терминале с PrettyTable
- Протокол управления контекстом
- Обработка исключений с блоком else
- Оператор assert в Python
- Вычисление натуральных логарифмов в NumPy
- Оператор is в Python
- Управление IP-адресами через прокси
- Оператор умножения для вектора
- Форматирование строк в Python
- Оператор деления для класса Rational
- Получение срезов итераторов
- Класс Counter() для подсчета элементов
- Склеивание строк через метод join()
- Bootle — простой веб-фреймворк
- Установка и использование howdoi
- Создание новых списков
- Преобразование чисел в слова
- Декораторы в Python
- Преобразование range в итератор
- Defaultdict в Python
- Python reversed() vs срез[::-1]
- Установка Git и AWS CLI
- Управление браузером с Selenium
- Возврат нескольких значений
- Разбиение строки в Python
- Удаление элементов во время итерации
- Измерение времени выполнения кода
- Списки: объединение, изменение
- Генерация QR-кодов с Python
- Преобразование PowerPoint в PDF.
- Работа с путями в Python
- Получение ID текущего процесса
- None в Python: использование и особенности
- Работа с аргументами командной строки в Python
- Очистка списка от False, None, 0, «»
- Python: отсутствие точек с запятыми
- Python Метод sleep() времени
- Форматирование строк с помощью f-строк
- Поиск индексов в списке
- Ключевое слово global в Python















