Вам нужно объявить G
, как global
, но почему: каждый раз, когда вы обращаетесь к переменной внутри функции, если вы установить переменная в любом месте в этой функции Python предполагает, что это локальная переменная. Поэтому, если локальная переменная с этим именем не существует в этой точке кода, вы получите UnboundLocalError
. Если вы на самом деле хотели ссылаться на глобальную переменную, как и в вашем вопросе, вам нужно указать ключевое слово global
, чтобы сообщить Python, что вы имели в виду.
Если вы не назначаете переменную нигде в функции, но получаете доступ только к ее значению, Python будет использовать глобальную переменную по этому имени, если она существует. Таким образом, вы можете сделать:
G = None
def foo():
if G is None:
print G
foo()
Этот код печатает None
и не бросает UnboundLocalError.
s/variables/names/g s/назначить/привязать к/g –
Да, можно использовать другую терминологию, но до тех пор, пока сам Python говорит о «переменных» и «присваивании» в сообщении об ошибке (как появляется в исходном вопросе), я думаю, что такая терминология вполне приемлема при объяснении проблемы. –
Point принят! Языковая ссылка не всегда всегда согласуется с этим вопросом. –