Курс 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
- Создание и операции с дробями
- Метод split() в Python
- Функциональное программирование.
- Методы работы со строками в Python
- Настройка вывода NumPy
- Поиск с библиотекой Google
- Оценка выражений генератора в Python
- Отправка POST-запроса в REST API
- Инверсия списка и строки в Python
- Изменения в обработке логических значений
- Установка максимального количества цифр
- Отображение графиков в Jupyter с Matplotlib
- Работа с функцией next() в Python
- Регулярные выражения: метод match
- Оператор continue в Python
- Зарезервированные слова в Python
- Метод lt для сортировки объектов
- Python Метод Union Множеств
- Логические значения в Python
- Работа с парами ключ-значение
- Любовь к Python
- Синхронизация потоков с time.sleep()
- Метод ior для битовых операций
- Метод bool() в Python
- Модуль math: основные функции
- split() — разделение строки
- Создание класса очереди
- Нахождение пересечения множеств
- Удаление элементов из списка в Python.
- Обработка ошибок в JSON данных
- Декоратор total_ordering для класса Point
- Использование super() в Python
- Логические значения в Python
- Комментарии в Python
- Измерение времени выполнения в Python
- Установка и использование TensorFlow
- Измерение времени выполнения кода в Python
- Работа с итераторами через срезы
- Сумма элементов списка
- Получение обратного списка чисел
- Анонимные функции Lambda
- Заказ карты Тинькофф Black
- Метод сравнения объектов в Python















