如何访问函数中的全局变量?

时间:2016-05-12 15:18:50

标签: python

我有一个模块,其中有一个函数接受输入,处理它,然后返回一个输出。当我调用此模块的功能时,它似乎可以正常工作,但我无法访问'结果'来自主程序的变量。

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()会产生所需的结果(即在预期时会更改为True),但是从主循环file_a.result始终为False。

3 个答案:

答案 0 :(得分:1)

你应该看看python中的全局v。本地命名空间,例如。 this random site I found

重点是,在函数中定义局部变量'results'。更改此项将更改外部(全局)变量结果。你可以通过告诉函数变量'result'应该是全局变量来改变它。简单地将“全局结果”作为函数的第一行。

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

那应该解决它。

答案 1 :(得分: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

答案 2 :(得分:0)

您正在寻找的答案是在file_a中的方法中使用global result,告诉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