Глобальная переменная в Python - PullRequest
3 голосов
/ 08 мая 2011

Я читал учебник по Python и вижу следующий код:

class Database:
# the database implementation
    pass

database = None

def initialize_database():
    global database
    database = Database()

Теперь, почему внутри функции initialize_database есть объявление global? Мы определили database вне функции, разве она уже не стала глобальной?

С наилучшими пожеланиями,

Ответы [ 2 ]

9 голосов
/ 08 мая 2011

Вы можете ссылаться на глобальное, когда оно не объявлено глобальным в функции, но вы можете только прочитать его;его запись создаст новую локальную переменную, скрывающую глобальную переменную.Декларация global позволяет писать в глобальные.

1 голос
/ 08 мая 2011

«global x» не делает x глобальным, его следует читать как «теперь в этом пространстве имен, обрабатывать все ссылки на x как ссылки на x в старшем пространстве имен».

Помните, что вы постоянно ничего не делаете с x, вы просто заставляете x указывать на что-то другое внутри функции.

...