Почему Python кажется непоследовательным в способности или неспособности функции локально обновлять глобальную переменнуPython

Программы на Python
Ответить
Anonymous
 Почему Python кажется непоследовательным в способности или неспособности функции локально обновлять глобальную переменну

Сообщение Anonymous »

Я изучаю Python. Я обнаружил, что следующая программа

Код: Выделить всё

def test():
y = x
y = y + 1
return y

x = 5
print(test())
print(x)
выводит
6

5
Это имеет смысл: глобальная переменная x входит в конструкцию локальной переменной y при вызове функции.
Кроме того, следующая программа

Код: Выделить всё

def test():
x = 6
return x

x = 5
print(test())
print(x)
выводит тот же результат
6

5
Опять же, это имеет смысл: переопределение x при вызове функции, я думаю, является локальным переопределением, которое уничтожается после вызова функции.
Ввиду того, как ведут себя две вышеупомянутые программы, я бы ожидал, что следующая программа

Код: Выделить всё

def test():
x = x + 1
return x

x = 5
print(test())
print(x)
должен также давать тот же результат: в первой программе вызов функции может ссылаться на глобальную переменную x, а во второй программе вызов функции может локально переопределить x; поэтому я не понимаю, почему вызов функции, которая выполняет и то, и другое, должен быть проблемой. Однако когда я запустил программу, я получил следующее сообщение об ошибке:

Код: Выделить всё

Traceback (most recent call last):
File "", line 6, in 
File "", line 2, in test
UnboundLocalError: cannot access local variable 'x' where it is not associated with a value
Мой вопрос: что пошло не так в третьей программе, что не работает ни в одной из первых двух программ?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»