跨文件访问Python全局变量
我在一个项目里有三个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
我可以在app.py里设置或重置一个标志,但processor方法却无法获取这个布尔变量的正确值。
它只获取lib.py开头设置的值,而不是app.py设置的值。我的需求是要获取app.py在运行时设置的值,而不是lib.py初始化时的值。
我在app.py和processor.py中以不同的方式导入lib文件,这会有影响吗?
这可能是个基本错误,所以如果有人能给我指个明路,我会很感激。同时,这也让我对全局变量的理解有些困惑。如果我把一个变量定义为'global',那是不是意味着这个变量在所有导入了这个变量(或者包含变量定义的文件)的文件中都保持为全局变量?
2 个回答
2
在这种情况下,最好的做法是把 vflag
作为参数传递给你需要的函数,而不是使用全局变量。
5
当你在 processor.py
文件中使用 from lib import *
时,其实是在获取 lib.py
文件当时的一个“快照”。这意味着 lib.py
文件会被执行,里面的所有函数和变量都会被复制到 processor.py
的命名空间中。你并不是在存储对 lib.py
中原始 vflag
的引用,而是存储了一个全新的副本。所以,如果你在 lib.py
中改变了 vflag
,那么 processor.py
就永远不会知道这个变化。
更好的做法是始终使用 import lib
,然后通过 lib.vflag
来访问这个变量。这样你甚至不需要使用 global
这个关键词。