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