我有两个模块,我试图从第二个模块修改第一个模块中的全局变量。
app.py
:
import time
glob=0;
def setval(val):
global glob
glob = val
print "glob = "+glob
def bau():
while(1):
if(glob):
print"glob is set"
else:
print"glob is unset"
time.sleep(1)
bau()
start.py
:
from app import setval
app.setval(1)
我无法理解为什么在start.py
中包含app.py
的完整内容,而不仅仅包含我想要的功能。
其次,我不了解为什么通过运行第一个app.py
然后start.py
,start.py
不会修改应用中全局变量的值。
答案 0 :(得分:4)
我无法理解为什么在start.py中app.py的完整内容是 包括而不仅仅是我想要的功能。
你误解了导入的工作原理。它的作用实际上是运行你导入的脚本,然后绑定到里面定义的东西。如果您只想导入一个函数,那么您的脚本除了声明之外不应该执行任何操作,即删除bau()
行。
通常你只会在脚本中声明函数,类和常量,并在一个根脚本中调用它们。
其次我不明白为什么要运行第一个app.py然后 start.py,start.py不会修改全局值 app中的变量
这是因为setval()
因bau()
来电而未到达start.py
,即import
语句中IAnnotationHover
已被屏蔽。
旁注:我建议你停止使用全局变量。用函数/类包装所有内容并传递参数。 Globals很难控制。
答案 1 :(得分:0)
根据freakish的建议,您可以使用该方法。
或者,如果您希望将其保留为不同脚本调用的格式,我建议您使用环境变量。
start.py
import os
os.environ['glob_var'] = 'any_variable'
app.py
import os
print os.environ.get('glob_var', 'Not Set')