模块之间的python全局变量

时间:2016-08-08 12:04:11

标签: python

我有两个模块,我试图从第二个模块修改第一个模块中的全局变量。

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.pystart.py不会修改应用中全局变量的值。

2 个答案:

答案 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')