Доступ к переменным уровня модуля из функции в модуле
Я хотел бы сделать что-то вроде этого:
#mymodule
var = None
def load():
var = something()
Другие модули (модули):
#secondmodule
import mymodule
mymodule.load()
#thirdmodule
from mymodule import var
print var #Shouldn't be None
Но я не знаю, как ссылаться на переменную модуля из функции, определенной в модуле.
Возможно ли это? Или мне нужно будет сделать глобальную декларацию в каждом месте, где я не буду использовать это.
Или я полностью ошибаюсь?
Ответы
Ответ 1
Просто измените
def load():
global var
var = something()
Глобальные переменные доступны только для чтения из методов sibling. Точнее, если переменная не указана как глобальная, Python считает ее локальной, но доступ для чтения к имени локальной переменной достигнет области уровня модуля, если имя отсутствует в локальной области.
См. также использование "глобального" ключевого слова в python и doc для получения более подробной информации о инструкции global
Ответ 2
У вас, похоже, в основном есть это. Вам не хватает только того факта, что переменные уровня модуля называются глобальными в Python. (Они не являются действительно глобальными, но только глобальными для модуля, в котором они объявлены, другими словами.)
В любой функции, где вы изменяете глобальную переменную (вы хотите, чтобы имя ссылалось на другой объект), оно должно быть объявлено глобальным. Поэтому вашей функции load()
требуется global var
в начале. Если вы используете только значение глобальной переменной или если это изменяемый тип, такой как список, и вы его изменяете, но не изменяете объект, на который указывает это имя, вам не нужно объявлять его глобальным.
Оператор import
, как вы выяснили, как вы можете импортировать переменную уровня модуля из одного модуля в другой.