Если вы хотите повлиять на global x
, вы должны явно указать, что:
def start():
global x
x = x + 1
print (str(x))
Причина, по которой у вас возникла проблема, заключается в том, что x = x + 1
сначала создает local x
потому что вы присваиваете ему, а он явно не помечен как глобальный.
Затем он использует это local x
(выглядит "вверх") найти ближайшую область, содержащую имя) для вычисления x + 1
и, поскольку оно еще не было инициализировано, вы получите ошибку local variable 'x' referenced before assignment
(не уверена, откуда взято ваше "упомянутое более одного раза").
Обратите внимание, что это не проблема с чем-то вроде y = x + 1
, так как созданная локальная переменная y
, и поэтому она будет смотреть вверх в области видимости, чтобы найти global x
для расчет.
Обратите внимание, что x += x
не добавляет один, а удваивает значение. В любом случае, он (и более правильный x += 1
) все еще страдает от неинициализированной проблемы с переменной. Это потому, что x += n
это просто синтактический c сахар для x = x + n
.