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文件。这有什么区别吗 ?
这可能是一个根本性的错误,因此,如果有人可以指出我的特定知识库,我将不胜感激。另外,这也弄乱了我对全局变量的理解。如果我将变量定义为“全局”,这是否意味着在导入该变量的所有文件(或包含该变量定义的文件)中,该变量仍将是全局变量
当您使用from lib import *in时processor.py,您将获得当时正在发生的情况的快照lib.py。该lib.py文件被执行,所有功能和变量被复制并存储在的名称空间中processor.py。你是不是保存到原来的引用vflag从lib.py-你存储一个全新的副本。所以,如果你改变vflag的lib.py,那么processor.py将永远不会知道。
更好的做法是始终使用import lib,并仅使用来访问变量lib.vflag。您甚至不需要使用global关键字。
| 归档时间: |
|
| 查看次数: |
1011 次 |
| 最近记录: |