我对全局变量的工作方式有点困惑。我有一个大项目,大约有 50 个文件,我需要为所有这些文件定义全局变量。
我所做的是在我的项目 main.py
文件中定义它们,如下所示:
# ../myproject/main.py
# Define global myList
global myList
myList = []
# Imports
import subfile
# Do something
subfile.stuff()
print(myList[0])
我正在尝试在subfile.py
中使用myList
,如下
# ../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 写入或泡菜,哪个我不想做。
最佳答案
问题是你从main.py
定义了myList
,但是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
:
# 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
这样,您可以实现目标,同时避免多次初始化全局变量。
https://stackoverflow.com/questions/13034496/