Функция не меняет глобальную переменную
мой код выглядит следующим образом:
done = False
def function():
for loop:
code
if not comply:
done = True #let say that the code enters this if-statement
while done == False:
function()
По какой-то причине, когда мой код входит в оператор if, он не выходит из цикла while после выполнения функции().
НО, если я закодирую его так:
done = False
while done == False:
for loop:
code
if not comply:
done = True #let say that the code enters this if-statement
... он выходит из цикла while. Что здесь происходит?
Я убедился, что мой код входит в оператор if. Я еще не запускал отладчик, потому что у моего кода много циклов (довольно большой 2D-массив), и я отказался от отладки из-за того, что он был настолько утомительным. Почему "сделано" не изменяется, когда оно находится в функции?
Ответы
Ответ 1
Ваша проблема в том, что функции создают собственное пространство имен, а это означает, что done
внутри функции отличается от done
во втором примере. Используйте global done
, чтобы использовать первый done
вместо создания нового.
def function():
global done
for loop:
code
if not comply:
done = True
Объяснение того, как использовать global
, можно найти здесь
Ответ 2
done=False
def function():
global done
for loop:
code
if not comply:
done = True
вам нужно использовать ключевое слово global, чтобы интерпретатор знал, что вы ссылаетесь на глобальную переменную done
, иначе она собирается создать другую, которая может быть прочитана только в функции.
Ответ 3
Используйте global
, только тогда вы можете изменить глобальную переменную, иначе оператор вроде done = True
внутри функции объявит новую локальную переменную с именем done
:
done = False
def function():
global done
for loop:
code
if not comply:
done = True
Подробнее о глобальном заявлении.