2016-01-28 3 views
1

У меня есть два файла module.py и main.pyпитон: Импорт функции со ссылками на глобальную область видимости

В module.py У меня есть функция, которая использует константу, определенную вне его сферы.

#module.py 
def add(x): 
    s = x + const 
    return s 
if __name__ == '__main__': 
    const = 2 
    print(add(2)) 

Он печатает 4 как выход при работе напрямую.

В main.py у меня есть:

#main.py 
import module as m 

const = 2 
print(m.add(2)) 

Это дает ошибку: NameError: name 'const' is not defined

Есть ли способ сделать m.add() ищет const в main.py глобальном масштабе? Я бы не хотел передавать const в add() в качестве функциональной переменной.

+2

Короткий ответ: Нет, это не возможно. Вам либо нужно сделать 'const' членом модуля (например,' m.const = 2'), либо передать его функции. – poke

+2

Каков ваш реальный прецедент? Почему бы вам не передать значение функции? Вот как должны работать функции. –

+0

Я хочу отделить свои функции модели от симулятора. Некоторые из этих функций используют одни и те же константы, которые я хочу объявить только один раз. Тем не менее, я хотел бы иметь возможность изменить их в файле моделирования. 'm.const' делает то, что я хочу – Ricevind

ответ

1

Непонятно, каков ваш реальный вариант использования, но если вы хотите иметь общую переменную между модулями, вам необходимо иметь эту переменную, определенную в области модуля.

Объявите это в одном модуле:

#module.py 
const = 0 # declare as global of module.py 
def add(x): 
    s = x + const 
    return s 
if __name__ == '__main__': 
    const = 3 
    print(add(2)) 

... и ссылаться на нее в другом:

#main.py 
import module as m 

m.const = 3 # reference module's variable 
print(m.add(2)) 
Смежные вопросы