На самом деле, вы не можете позвонить x += 2
, потому что x еще не определен в вашем коде. Вы можете прочитать x
как глобальную переменную или изменить ее значение, используя global
.
Если вы запустите свой код, вы получите ошибку:
UnboundLocalError: local variable 'x' referenced before assignment
Он говорит вам: я знаю, что в вашем коде есть глобальная переменная x, но вы не можете ее здесь изменить. Но если вы сделаете sh, вы можете создать локальную переменную с именем x, а затем изменить ее значение. Или, если вы действительно хотите изменить значение из глобальной переменной, используйте ключевое слово global, чтобы я точно знал, что вы хотите сделать.
Объявление его локально:
def foo():
x = 0
x += 2
obj.a += 10
obj = player(0,0)
x = 4
foo()
При глобальном:
def foo():
global x
x += 2
obj.a += 10
obj = player(0,0)
x = 4
foo()
Теперь, почему x.a += 10
работает?
Поскольку вы вообще не меняете объект x.
Как упоминал Джон в своем ответе, такая же ошибка возникнет, если вы измените сам объект, а не его свойства.
, если вы попытаетесь запустить приведенный ниже код:
def foo():
obj += 10
obj = player(0,0)
x = 4
foo()
You Вы получите ту же ошибку, что и раньше:
UnboundLocalError: local variable 'obj' referenced before assignment