跨文件访问Python全局变量

foo*_*ose 3 python import global

我在一个项目中有三个python文件:

'''lib.py
   library file that first defines and also accesses a boolean flag'''
vflag = False
...
def lib_method()
  global vflag
  if not vflag:
    do_something_here

'''app.py
   main application that sets the boolean flag defined in lib.py'''
import lib
lib.vflag = method_that_sets_or_resets_vflag()


'''processor.py
   does some processing and needs to access the bool flag'''
from lib import *
...
def processor_method()
  global vflag
  ...
  if vflag:
    do_something_here
Run Code Online (Sandbox Code Playgroud)

我可以在app.py上设置/重置标志,但是处理器方法无法为该布尔变量获取正确的值。

它只会得到lib.py开头设置的内容(而不是app.py设置的内容)。要求是在运行时通过app.py设置的值,而不是由lib.py初始化的值。

我正在app.py和processor.py中以不同的方式导入lib文件。这有什么区别吗 ?

这可能是一个根本性的错误,因此,如果有人可以指出我的特定知识库,我将不胜感激。另外,这也弄乱了我对全局变量的理解。如果我将变量定义为“全局”,这是否意味着在导入该变量的所有文件(或包含该变量定义的文件)中,该变量仍将是全局变量

The*_*nse 5

当您使用from lib import *in时processor.py,您将获得当时正在发生的情况的快照lib.py。该lib.py文件被执行,所有功能和变量被复制并存储在的名称空间中processor.py。你是不是保存到原来的引用vflaglib.py-你存储一个全新的副本。所以,如果你改变vflaglib.py,那么processor.py将永远不会知道。

更好的做法是始终使用import lib,并仅使用来访问变量lib.vflag。您甚至不需要使用global关键字。