我在一个项目中有三个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 中设置/重置标志,但是处理器方法无法获得此 bool 变量的正确值。
它只获取 lib.py 开头设置的内容(而不是 app.py 设置的内容)。要求是访问 app.py 在运行时设置的值,而不是 lib.py 初始化的值
我在 app.py 和 processor.py 中以不同的方式导入 lib 文件。这有什么不同吗?
这可能是一个根本性的错误,所以如果有人能给我指出一个特定的知识库,我将不胜感激。 此外,它扰乱了我对全局变量的理解。如果我将一个变量定义为“全局”,是否意味着该变量在所有导入该变量的文件(或包含变量定义的文件)中保持为全局变量
最佳答案
当您在 processor.py
中使用 from lib import *
时,您会得到 snapshot lib 中发生的事情.py
那一刻。 lib.py
文件被执行,所有函数和变量都被复制并存储在 processor.py
的命名空间中。您没有存储对来自 lib.py
的原始 vflag
的引用 - 您正在存储一个全新的副本。因此,如果您在 lib.py
中更改了 vflag
,那么 processor.py
将永远不会知道它。
更好的做法是始终使用import lib
,并且只使用lib.vflag
访问变量。您甚至不需要使用 global
关键字。
关于python - 跨文件访问 Python 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072311/