Курс 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"
- Метод classmethod
- Возврат нескольких значений
- Python Метод Union Множеств
- Аннотации типов в Python
- Обработка ошибки IndexError
- Разработка Telegram-ботов
- Работа с каталогами в Python
- Работа с географическими данными.
- Генераторные функции в Python
- Генераторы списков в Python
- Класс-оболочка для словарей
- Переворот строки с помощью срезов
- Подсказки при вводе данных в Python
- Работа с геоданными с помощью geopy
- Управление User-Agent в Python
- Обмен значений переменных в Python
- Создание задания в Cron
- Работа с кортежами в Python
- Настройка нарезки списков
- Combobox в Tkinter
- Работа со строками в Python
- Дизассемблирование Python кода
- Метод join() для объединения элементов строки
- Отправка POST-запроса в REST API
- Python enumerate() использование
- Изменение регистра данных
- Вывод букв строки в Python
- Проверка на истинность объектов в Python
- Функции классификации комплексных чисел
- Управление доступом к модулю
- Очистка строки в Python
- Подсчет элементов в Python
- Документация функции help() в Python
- Регистрация на TenChat
- Генераторы в Python
- Python OrderedDict и fromkeys() — работа с словарями
- Работа с множествами в Python
- Разделение строки в Python
- Основы работы с os
- Управление памятью в numpy.
- Список методов и атрибутов
- Профилирование кода
- Установка и использование модуля Wikipedia
- Основные методы NumPy
- Многострочные строки в Python
- Подсчет элементов в Python
- Каналы Senior: Python, Java, Frontend, SQL, C++















