Вызов функции не обновляет глобальную переменную
Этот вопрос исследует проблему программирования, когда глобальная переменная, изначально присвоенная как False, не обновляется t обновляется при ссылке внутри функции. Несмотря на то, что функция изменяет значение глобальной переменной, основной цикл программы продолжает выполняться, что приводит к бесконечному циклу. Для понимания этой проблемы необходимо углубиться в концепцию пространств имен и области видимости переменных.
Пространство имен и область видимости переменных
В программировании каждая функция и модуль создают собственное пространство имен. Пространство имен — это набор имен (переменных, функций и т. д.), которые известны и доступны в этой области. Когда переменной присваивается значение внутри функции, в пространстве имен функции создается новая переменная, даже если существует глобальная переменная с таким же именем.
Использование глобальных переменных
В этом случае, когда внутри функции ссылается на глобальную переменную с именем «done», в пространстве имен функции создается новая локальная переменная с тем же именем. Это локальное «готово» отличается от глобального «готово». Изменение локального значения «done» не влияет на глобальную переменную.
Решение
Чтобы преодолеть эту проблему, необходимо использовать ключевое слово global для явной ссылки на глобальную переменную внутри функция. Используя global Done, функция сообщает интерпретатору о доступе к глобальной переменной Done вместо создания новой локальной.
Модифицированный код
Чтобы устранить проблему , функцию можно изменить следующим образом:
def function():
global done
for loop:
code
if not comply:
done = True
Объяснение
Использование global Done устанавливает связь между переменной, используемой внутри функции, и глобальной. Когда функция изменяет значение Done, она обновляет ту же глобальную переменную, на которую ссылались изначально. Это гарантирует, что цикл while основной программы завершится должным образом, когда функция установит значение True.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3