2016-05-12 3 views
0

У меня есть модуль, в котором есть функция, которая принимает вход, обрабатывает его, а затем возвращает вывод. Когда я вызываю функцию этого модуля, он работает, но я не могу получить доступ к переменной «result» из основной программы.Как получить доступ к глобальной переменной в функции?

file_a.py:

result = False 
def test(incoming): 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 

file_b.py:

import file_a 
for i in range(5): 
    file_a.test(i) 
    print(i, file_a.result) 

опрашивая result изнутри test() производит желаемого результата (т.е. она изменяется Истина, когда ожидается), но из основного цикла file_a.result всегда False.

ответ

0

Что происходит в том, что переменная result внутри функции - это версия, которая существует только в области этой функции. Попробуйте объявить result как глобальные, так как:

result = False 
def test(incoming): 
    global result # declare result as global 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 
1

Вы должны взглянуть на глобальных против локальных пространств имен в питоне, например.. this random site I found.

Главное, что вы определяете локальную переменную 'results' в своей функции. Изменение этого будет не изменить внешний (внешний) результат переменной. Вы можете изменить это, указав функции, что переменная 'result' должна быть глобальной. Просто введите «глобальный результат» в качестве первой строки функции.

result = False  
    def test(incoming): 
    global result 
    ... 

Это должно исправить это.

+0

Это правильно. Но в зависимости от того, что вы действительно пытаетесь сделать, вы также можете оставить его как локальный и выполнить назначение в файле_b (сменить файл_a.test (i) на a = file_a.test (i), а затем a имеет возвращаемое значение по вызову функции. Вы даже можете назвать его «return», а не «a». – ViennaMike

0

Ответ, который вы ищете, - это использовать метод global result внутри метода в файле_a, чтобы сообщить python, что вы имеете в виду глобальный. Однако это только заставляет его работать для вашего кода. Я бы сказал, что ваша реализация неверна (и опасна).

В этом случае, почему вы не используете назначение переменной во время вызова функции? Вы предоставляете возврат и никогда не используете его.

file_a.py

def test(incoming): 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 

file_b.py

import file_a 
for i in range(5): 
    result = file_a.test(i) 
    print(i, result) 

Там, кажется, нет никаких причин, чтобы загрязнить глобальную переменную пространства. Если вам действительно нужен этот тип функциональности, вы должны использовать класс. Как только у вас есть два модуля, использующих этот модуль, все может пойти очень плохо. Вы начинаете использовать результаты чужого звонка.

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

def test(incoming): 
    return incoming > 3 
Смежные вопросы