我对全局变量的工作方式感到困惑。我有一个大型项目,大约有50个文件,并且需要为所有这些文件定义全局变量。
我所做的就是在我的项目main.py文件中定义它们,如下所示:
# ../myproject/main.py # Define global myList global myList myList = [] # Imports import subfile # Do something subfile.stuff() print(myList[0]) 我想用myList在subfile.py,如下 # ../myproject/subfile.py # Save "hey" into myList def stuff(): globals()["myList"].append("hey")
我尝试过的另一种方法,但也没有用
# ../myproject/main.py # Import globfile import globfile # Save myList into globfile globfile.myList = [] # Import subfile import subfile # Do something subfile.stuff() print(globfile.myList[0])
在subfile.py我里面有这个:
# ../myproject/subfile.py # Import globfile import globfile # Save "hey" into myList def stuff(): globfile.myList.append("hey")
但是同样,它没有用。我应该如何实施呢?我知道当两个文件彼此之间并不真正了解时(子文件不知道主文件),它就不能那样工作,但是如果不使用io编写或pickle,我就无法考虑如何做到这一点。我不想做
问题是你myList从定义的main.py,但是subfile.py需要使用它。这是解决此问题的一种干净方法:将所有全局变量移到一个文件中,我将此文件称为settings.py。该文件负责定义全局变量并初始化它们:
main.py
subfile.py
settings.py
# settings.py def init(): global myList myList = []
接下来,你subfile可以导入全局变量:
# subfile.py import settings def stuff(): settings.myList.append('hey')
请注意,subfile它不会调用init()该任务属于main.py:
subfile
init()
# main.py import settings import subfile settings.init() # Call only once subfile.stuff() # Do stuff with global var print settings.myList[0] # Check the result
这样,你可以实现自己的目标,同时避免多次初始化全局变量。