Подтвердить что ты не робот

Доступ к переменным уровня модуля из функции в модуле

Я хотел бы сделать что-то вроде этого:

#mymodule
var = None

def load():
    var = something()

Другие модули (модули):

#secondmodule
import mymodule
mymodule.load()

#thirdmodule
from mymodule import var
print var #Shouldn't be None

Но я не знаю, как ссылаться на переменную модуля из функции, определенной в модуле.

Возможно ли это? Или мне нужно будет сделать глобальную декларацию в каждом месте, где я не буду использовать это. Или я полностью ошибаюсь?

4b9b3361

Ответ 1

Просто измените

def load():
    global var
    var = something()

Глобальные переменные доступны только для чтения из методов sibling. Точнее, если переменная не указана как глобальная, Python считает ее локальной, но доступ для чтения к имени локальной переменной достигнет области уровня модуля, если имя отсутствует в локальной области.

См. также использование "глобального" ключевого слова в python и doc для получения более подробной информации о инструкции global

Ответ 2

У вас, похоже, в основном есть это. Вам не хватает только того факта, что переменные уровня модуля называются глобальными в Python. (Они не являются действительно глобальными, но только глобальными для модуля, в котором они объявлены, другими словами.)

В любой функции, где вы изменяете глобальную переменную (вы хотите, чтобы имя ссылалось на другой объект), оно должно быть объявлено глобальным. Поэтому вашей функции load() требуется global var в начале. Если вы используете только значение глобальной переменной или если это изменяемый тип, такой как список, и вы его изменяете, но не изменяете объект, на который указывает это имя, вам не нужно объявлять его глобальным.

Оператор import, как вы выяснили, как вы можете импортировать переменную уровня модуля из одного модуля в другой.