Несоответствие в использовании глобальной переменной в функции в Python - PullRequest
3 голосов
/ 11 июля 2020

Я просто играл с Python и наткнулся на кое-что интересное, чего не совсем понял. Код выглядит следующим образом:

a = 1
def function():
  print(a)
function()
print(a)

Здесь a - глобальная переменная, и я использовал ее в своей функции, и результат был:

1
1

Я смог использовать глобальную переменную. переменная локально в моей функции без использования global a в моей функции.

Затем я продолжил эксперименты с этим:

a = 1
def function():
  a = a+1
  print(a)
function()
print(a)

Когда я запустил этот код, появилась ошибка и в нем говорилось, что перед назначением была сделана ссылка на локальную переменную a. Я не понимаю, как раньше он распознал, что a была глобальной переменной без global a, но теперь мне нужно global a вот так

a = 1
def function():
  global a
  a = a+1
  print(a)
function()
print(a)

, чтобы этот код работал. Может кто-нибудь объяснить это несоответствие?

Ответы [ 2 ]

3 голосов
/ 11 июля 2020

Вы можете прочитать значение из глобальной переменной в любое время, но ключевое слово global позволяет вам изменить его значение.

Это потому, что когда вы пытаетесь установить переменную a в своей функции, по умолчанию он создает новую локальную переменную функции с именем a. Чтобы указать python, что вы хотите вместо этого обновить глобальную переменную, вам необходимо использовать ключевое слово global.

0 голосов
/ 12 июля 2020

При создании «=» новая переменная внутри функции python не проверяет, является ли эта переменная глобальной переменной, она обрабатывает эту новую переменную как новую локальную переменную, и поскольку вы назначаете ее самой себе, еще не существует локально, тогда возникает ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...