跨文件访问一个Python全局变量[英] Accessing a Python global variable across files

问题描述

我在一个项目中有三个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上设置/重置标志,但是处理器方法无法获得此布尔变量的正确值.

它仅在lib.py开头设置的任何内容(不是app.py设置的内容).要求是通过app.py访问运行时设置的值,而不是lib.py

初始化的值

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

这可能是一个根本的错误,因此,如果有人可以将我指向特定的知识库,我将不胜感激. 另外,这使我对全球变量的理解感到困惑.如果我将变量定义为"全局",这是否意味着该变量保持为所有导入此变量的文件(或包含变量定义的文件)

>

推荐答案

当您在processor.py中使用from lib import *时,您正在获得快照当时lib.py中正在发生的事情.执行lib.py文件,所有函数和变量均已复制并存储在processor.py的名称空间中.您不是从lib.py中存储对原始vflag的引用 - 您正在存储一个全新的副本.因此,如果您在lib.py中更改vflag,那么processor.py将永远不会知道.

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

其他推荐答案

这种情况的最佳实践是将vflag传递到您需要的函数中,并且不使用全局变量.

本文地址:https://www.itbaoku.cn/post/902511.html